java注解
annotation是一个接口,可以通过反射来获取指定程序种元素的annotation对象,通过该annotation对象来获取注解中的元数据信息。
脑图

四种标准元注解
https://www.cnblogs.com/skywang12345/p/3344137.html
1 |
|
@interface(声明Annotation,自定义annotation)
使用@interface定义注解时,意味着它实现了java.lang.annotation.Annotation接口,即该注解就是一个Annotation。定义Annotation时,@interface是必须的。
@Documented(javadoc)
如果使用@Documented修饰该Annotation,则表示它可以出现在javadoc中。
@Target(指定Annotation的类型, 1~n个ElementType)
1 | public enum ElementType { |
@Retention(指定Annotation的策略,1个RetentionPolicy)
1 | public enum RetentionPolicy { |
a) 若Annotation的类型为 SOURCE,则意味着:Annotation仅存在于编译器处理期间,编译器处理完之后,该Annotation就没用了。
例如,“ @Override ”标志就是一个Annotation。当它修饰一个方法的时候,就意味着该方法覆盖父类的方法;并且在编译期间会进行语法检查!编译器处理完后,“@Override”就没有任何作用了。
b) 若Annotation的类型为 CLASS,则意味着:编译器将Annotation存储于类对应的.class文件中,它是Annotation的默认行为。
c) 若Annotation的类型为 RUNTIME,则意味着:编译器将Annotation存储于class文件中,并且可由JVM读入。
java 常用的Annotation
1 | @Deprecated -- @Deprecated 所标注内容,不再被建议使用。 |
@Inferited
假设,我们定义了某个Annotaion,它的名称是MyAnnotation,并且MyAnnotation被标注为@Inherited。现在,某个类Base使用了MyAnnotation,则Base具有了“具有了注解MyAnnotation”;现在,Sub继承了Base,由于MyAnnotation是@Inherited的(具有继承性),所以,Sub也“具有了注解MyAnnotation”。
@Deprecated
若某个方法被 @Deprecated 标注,则该方法不再被建议使用。如果有开发人员试图使用或重写被@Deprecated标示的方法,编译器会给相应的提示信息。
@SuppressWarnings
让编译器对“它所标注的内容”的某些警告保持静默。例如,”@SuppressWarnings(value={“deprecation”, “unchecked”})” 表示对“它所标注的内容”中的 “SuppressWarnings不再建议使用警告”和“未检查的转换时的警告”保持沉默。

annotation作用
编译检查
例如,@SuppressWarnings, @Deprecated和@Override都具有编译检查作用。
(01) 关于@SuppressWarnings和@Deprecated。
(02) 若某个方法被 @Override的 标注,则意味着该方法会覆盖父类中的同名方法。如果有方法被@Override标示,但父类中却没有“被@Override标注”的同名方法,则编译器会报错。
反射中使用(aop去打log等非业务相关但必须做的,减少代码入侵)
1 |
|
根据Annotation生成帮助文档
通过给Annotation注解加上@Documented标签,能使该Annotation标签出现在javadoc中。
能够帮忙查看查看代码
通过@Override, @Deprecated等,我们能很方便的了解程序的大致结构。
另外,我们也可以通过自定义Annotation来实现一些功能。