自定义注解的场景及实现


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 "hello@example.com";
}

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM