> Java > java지도 시간 > 본문

SpringBoot에서 @AliasFor 주석을 사용하는 방법

王林
풀어 주다: 2023-05-18 21:46:04
앞으로
1670명이 탐색했습니다.

사용법 1: 주석의 속성은 서로에 대한 별칭입니다.

소개

사용자 정의 주석의 두 속성에 주석을 달 수 있습니다. 이는 두 속성이 서로에 대한 별칭임을 나타냅니다. 즉, 두 속성이 실제로 같은 의미.

  • 속성 이름 중 하나는 "값"이어야 합니다.

  • 속성 값을 설정하기 위해 어떤 속성 이름을 지정하든 다른 속성 이름도 동일한 속성 값을 가지거나 기본 속성 이름을 다음과 같이 지정할 수 있습니다. 사용된.

  • 둘 다 속성 값을 지정하는 경우 필수 값이 동일해야 하며, 그렇지 않으면 오류가 보고됩니다.

  • 사용하기 쉽습니다. 이렇게 사용한 후 @MyAnno(location="shanghai")는 다음과 같이 직접 작성할 수 있습니다: @MyAnno("shanghai");

이 기능의 이유:

사용자 정의 주석에 속성이 있는 경우 속성의 이름이 지정됩니다. 그 의미를 반영하기 위해 호출자는 속성을 작성한 다음 사용자 정의 주석을 사용할 때마다 설정해야 하는데 이는 약간 번거로운 일입니다.

Instance

Annotations

package com.example.annotation;
 
import org.springframework.core.annotation.AliasFor;
 
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
public @interface MyAnnotation {
    @AliasFor(attribute = "location")
    String value() default "";
    
    @AliasFor(attribute = "value")
    String location() default "";
}
로그인 후 복사
로그인 후 복사
로그인 후 복사

Controller

package com.example.controller;
 
import com.example.annotation.MyAnnotation;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/hello")
public class HelloController {
 
    @MyAnnotation(value = "location")
    /*//下边这两种写法结果与上边是相同的
    @MyAnnotation("location")
    @MyAnnotation(location = "location")*/
    @RequestMapping("/test1")
    public String test1() {
        MyAnnotation myAnnotation = null;
        try {
            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test1"), MyAnnotation.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
 
        return  "value:" + myAnnotation.value() + ";loation:" + myAnnotation.location();
    }
}
로그인 후 복사

Test

프런트엔드 액세스: http://localhost:8080/hello/test1

프런트엔드 결과(값과 위치는 모두 동일한 값)

value:location;loation:location

Usage 2. 속성 이름을 다시 쓰지 않고 상위 주석의 속성을 상속합니다.

Introduction

하위 주석의 속성 값을 읽고 쓰는 것은 실제로 상위 주석 읽기 및 쓰기의 속성 값입니다. (상속된 속성의 경우)

현재는 상속된 속성값만 읽고 쓸 수 있습니다.

Code

Annotations

package com.example.annotation;
 
import org.springframework.core.annotation.AliasFor;
 
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
public @interface MyAnnotation {
    @AliasFor(attribute = "location")
    String value() default "";
    
    @AliasFor(attribute = "value")
    String location() default "";
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
package com.example.annotation;
 
import org.springframework.core.annotation.AliasFor;
 
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
@MyAnnotation
public @interface SubMyAnnotation {
    @AliasFor(annotation = MyAnnotation.class)
    String location() default "";
 
//    这个不能写,只能有一个与父属性名同名的属性,否则报错
//    @AliasFor(annotation = MyAnnotation.class)
//    String value() default "";
}
로그인 후 복사

Controller

package com.example.controller;
 
import com.example.annotation.MyAnnotation;
import com.example.annotation.SubMyAnnotation;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/hello")
public class HelloController {
    @SubMyAnnotation(location = "location(my)")
    @RequestMapping("/test")
    public String test() {
        SubMyAnnotation subMyAnnotation = null;
        MyAnnotation myAnnotation = null;
        MyAnnotation myAnnotation1 = null;
 
        try {
            subMyAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), SubMyAnnotation.class);
            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);
            myAnnotation1 = AnnotatedElementUtils.getMergedAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
 
        return "loation(sub):" + subMyAnnotation.location() + "\n" +
                "location:" + myAnnotation.location() + "\n" +
                "location:" + myAnnotation1.location();
    }
}
로그인 후 복사

Test

프런트 엔드 액세스: http://localhost:8080/hello/test

Results

loation(하위) : location(my)
location:
location:location(my)

사용법 3: 상위 주석의 속성을 상속하고 속성 이름을 다시 작성

Introduction

하위 주석의 속성 값 읽기 및 쓰기 실제로는 속성 값을 읽고 쓰는 상위 주석입니다. (재정의된 속성의 경우)

속성값을 설정하기 위해 어떤 속성명을 지정하더라도 다른 속성명도 동일한 속성값을 가지며, 기본 속성명은 사용할 수 없습니다.

둘 다 속성 값을 지정하는 경우 필수 값은 동일해야 하며, 그렇지 않으면 오류가 보고됩니다.

Code

Annotations

package com.example.annotation;
 
import org.springframework.core.annotation.AliasFor;
 
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
public @interface MyAnnotation {
    @AliasFor(attribute = "location")
    String value() default "";
    
    @AliasFor(attribute = "value")
    String location() default "";
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
package com.example.annotation;
 
import org.springframework.core.annotation.AliasFor;
 
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
@MyAnnotation
public @interface SubMyAnnotation {
    @AliasFor(attribute = "value", annotation = MyAnnotation.class)
    String subValue() default "";
 
    @AliasFor(attribute = "location", annotation = MyAnnotation.class)
    String subLocation() default "";
 
//    subLocation属性写成下边这两种结果是一样的
//    @AliasFor(attribute = "value", annotation = MyAnnotation.class)
//    String subLocation() default "";
 
//    @AliasFor(value = "location", annotation = MyAnnotation.class)
//    String subLocation() default "";
//
}
로그인 후 복사

Controller

package com.example.controller;
 
import com.example.annotation.MyAnnotation;
import com.example.annotation.SubMyAnnotation;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/hello")
public class HelloController {
    @SubMyAnnotation(subValue = "subLocation")
//    @SubMyAnnotation(subLocation = "subLocation")   //这个与上边结果相同
//    @SubMyAnnotation("subLocation")   //缺省属性名会报错
    @RequestMapping("/test")
    public String test() {
        SubMyAnnotation subMyAnnotation = null;
        MyAnnotation myAnnotation = null;
        MyAnnotation myAnnotation1 = null;
 
        try {
            subMyAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), SubMyAnnotation.class);
            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);
            myAnnotation1 = AnnotatedElementUtils.getMergedAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return "subValue:" + subMyAnnotation.subValue() + ";subLoation:" + subMyAnnotation.subLocation() + "\n" +
                "value:" + myAnnotation.value() + ";location:" + myAnnotation.location() + "\n" +
                "value:" + myAnnotation1.value() + ";location:" + myAnnotation1.location();
    }
}
로그인 후 복사

Test

프런트 엔드 액세스: http://localhost:8080/hello/test

Results

subValue:subLocation; subLoation :subLocation
값:;위치:
값:subLocation;위치:subLocation

위 내용은 SpringBoot에서 @AliasFor 주석을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿