java注解入门

1.元注解
/**
 * @author bobo ([email protected])
 * @date 2018年01月28日
 * @desc 演示自定义注解
 */


/**
 * 元注解: 指的是注解的注解, 包括 @Documented, @Target, @Inherited, @Retention 四种
 *
 * 1. @Documented 表明了这个注解应该被 javadoc工具记录
 *      默认情况下, javadoc是不包括注解的, 但如果申明时指定了 @Documented, 那么它就会被 javadoc之类的工具处理,
 *      所以注解类型信息也会被包括在生成的文档中.
 *
 * 2. @Target 用于设定注解的使用范围, Target通过 ElementType来指定注解可使用范围的枚举集合
 *      取值如下:
 *          ElementType.METHOD                  可用于方法上
 *          ElementType.TYPE                    可用于类或接口上
 *          ElementType.ANNOTATION_TYPE         可用于注解类型上 (被 @interface修饰的类型)
 *          ElementType.CONSTRUCTOR             可用于构造方法上
 *          ElementType.FIELD                   可用于字段上
 *          ElementType.LOCAL_VARIABLE          可用于局部变量上
 *          ElementType.PACKAGE                 用于记录 java文件的 package信息
 *          ElementType.PARAMETER               可用于参数上
 *
 *
 * 3. @Inherited 表明了某个被标注的类型是被继承的
 *      如果一个使用了 @Inherited修饰的 Annotation类型被用于一个类, 那么这个 Annotation将被用于该 class的子类
 *      注意:
 *        1. @Inherited annotation类型是被标注过的 class的子类所继承. 类并不从它所实现的接口继承 annotation
 *              方法并不从它所从重载的方法继承 annotation
 *        2. 当 @Inherited annotation类型标注的 annotation的 Retention是 RetentionPolicy.RUNTIME, 则反射 API增强了这种继承性
 *              如果我们使用 java.lang.reflect去查询一个 @Inherited annotation类型的 annotation时, 反射代码将展开工作:
 *              检查 class和其父类, 直到指定的 annotation类型被发现, 或者到达类继承结构的顶层
 *
 *
 * 4. @Retention (保留)注解说明到 Java类的哪个阶段, 有三个值
 *      * RetentionPolicy.SOURCE    这种类型的注解只会在源码级别保留, 编译时就会被忽略
 *      * RetentionPolicy.CLASS     这种类型的注解在编译时会被保留, 在 class文件中存在, 但 JVM将会忽略
 *      * RetentionPolicy.RUNTIME   这种类型的注解会被 JVM保留, 所以它们能在运行时被 JVM或其它使用反射机制的代码所读取和使用
 *
 */

@Documented
@Target({ElementType.METHOD, ElementType.FIELD})
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface DataSourceSelector {

    String value();
    
}

参考文章

1.  详解JDK 5 Annotation 注解之@Target的用法介绍

2. Java注解教程及自定义注解


你可能感兴趣的:(Java)