通过注解实现面向切片编程的核心步骤
- 定义注解
- 实现解析注解的代码
- 使用注解
定义注解
声明的方式
- 对于JavaType.java文件,我们常用的是用来声明类(class)或接口(interface)
1 | public class JavaType{ |
或者
1 | public interface JavaType{ |
这里我们使用@interface来定义一个annnotation注解
1 | public JavaType{ |
在@interface上使用注解
@Target注解
- 用来声明注解的使用目标,常见@Target的值有:ElementType.Method用于方法,ElementType.Type用于类型(包括java类、接口、注解), ElementType.Parameter用于方法参数,还有更多枚举可以从ElementType中找到具体定义
1 |
|
@Retention注解
- 使用有道词典翻译是保持力的名词意思,此注解的@Target声明的是ANNOTATION_TYPE,用于为注解类型提供声明
- @Retention配置的值从RetentionPolicy.java枚举中选择,可选值为SOURCE,CLASS,RUNTIME
- SOURCE定义的注解保留在源代码中,不编译到Class中去,如@Override和@SuppressWarnings注解使用本策略
- CLASS定义的注解会保留到class文件,但是运行期间不会识别此注解
- RUNTIME定义的注解会被保留到class文件中,同时运行期间也会被识别,AOP中使用的注解一般情况下使用本策略
@Documented
- 用于javadoc的一个注解,声明注解时使用了本注解时,在到处javadoc时,在javadoc中就能看到目标的注解声明
在一个注解中定义方法
- 定义一:基本使用,使用default关键字
1 | import java.lang.annotation.*; |
- 使用一
1 | public class Test{ |
- 关键字default指定默认值,默认值必须是与元素的数据类型兼容的类型
- 定义二: 使用枚举
1 | import java.lang.annotation.*; |
- 使用二
1 | import java.lang.annotation.RetentionPolicy; |
- 定义三:使用数组
1 | import java.lang.annotation.*; |
- 使用三
1 | import java.lang.annotation.ElementType; |