Maison >Java >javaDidacticiel >Comment utiliser l'annotation @AliasFor dans SpringBoot
Il peut être annoté avec deux attributs de l'annotation personnalisée, indiquant que les deux les attributs sont des alias l'un pour l'autre, c'est-à-dire que ces deux attributs ont en réalité la même signification.
L'un des noms d'attribut doit être "valeur"
Peu importe le nom d'attribut spécifié set, définissez la valeur de l'attribut, un autre nom d'attribut est également la même valeur d'attribut, ou le nom d'attribut par défaut peut être utilisé.
Si les deux spécifient des valeurs d'attribut, les valeurs requises doivent être les mêmes, sinon une erreur sera signalée.
Simple à utiliser. Après l'avoir utilisé ainsi, @MyAnno(location="shanghai") peut être écrit directement comme : @MyAnno("shanghai");
La raison de cette fonction : #🎜 🎜#
Si l'annotation personnalisée a un attribut et que l'attribut est nommé pour refléter sa signification, l'appelant doit écrire l'attribut puis le définir à chaque fois qu'il utilise l'annotation personnalisée, ce qui est un peu gênant . InstanceAnnotation
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 ""; }
Controllerr rriee # 🎜🎜#
TestAccès front-end : http://localhost:8080/hello/test1
Résultats front-end (les deux la valeur et l'emplacement sont la même valeur)
value:location;loation:locationUsage 2. Hériter des attributs de l'annotation parent et ne réécrivez pas le nom de l'attribut
Pour le moment, seules les valeurs des propriétés héritées peuvent être lues et écrites.
code
notepackage 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();
}
}
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 "";
}
# 🎜🎜#test
Accès front-end : http://localhost:8080/hello/test
result# 🎜 🎜#
loation(sub):location(my)location:
location:location(my)La lecture et l'écriture de la valeur de l'attribut de l'annotation enfant sont en fait l'attribut valeur de l'annotation parent Lire et écrire. (Pour les attributs remplacés) Peu importe le nom d'attribut spécifié pour définir la valeur d'attribut, l'autre nom d'attribut aura également la même valeur d'attribut et le nom d'attribut par défaut ne pourra pas être utilisé. Si les deux spécifient des valeurs d'attribut, les valeurs requises doivent être les mêmes, sinon une erreur sera signalée. code#🎜 🎜 #Utilisation 3 : Hériter des attributs de l'annotation parent et réécrire le nom de l'attribut
Introduction
note
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(); } }
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.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 ""; // }# 🎜🎜#test
Accès front-end : http://localhost:8080/hello/test
result# 🎜 🎜#
subValue:subLocation;subLoation:subLocation
value:;location:value:subLocation;location:subLocation
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!