自定义注解的场景及实现

java中有四种元注解:@Retention、@Inherited、@Documented、@Target

@Retention
注解的保留位置(枚举RetentionPolicy),RetentionPolicy可选值:

SOURCE:注解仅存在于源码中,在class字节码文件中不包含
CLASS:默认的保留策略,注解在class字节码文件中存在,但运行时无法获得
RUNTIME:注解在class字节码文件中存在,在运行时可以通过反射获取到
@Inherited
声明子类可以继承此注解,如果一个类A使用此注解,则类A的子类也继承此注解

@Documented
声明注解能够被javadoc等识别(下面自定义注解处会有例子做介绍,点击查看)

@Target
用来声明注解范围(枚举ElementType),ElementType可选值:

TYPE:接口、类、枚举、注解
FIELD:字段、枚举的常量
METHOD:方法
PARAMETER:方法参数
CONSTRUCTOR:构造函数
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解
PACKAGE:包

自定义注解经常使用场景:

1.生成文档.例如:@see,@param,@return 等

2.代替配置文件功能.例如spring基于注解的配置

3.在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

不经常使用的场景:

1.类属性自动赋值

2.验证对象属性完整性

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@interface MyAnno{
    public String name() default "zhangsan";
    public String email() default "[email protected]";
}

 

猜你喜欢

转载自www.cnblogs.com/goodbye-lazy/p/10194674.html