版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liangjingkanji/article/details/53485107
注解
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释.
注解分类
- 标示注解: 成员个数为0
- 单值注解: 成员个数为1
- 完整注解: 成员个数大于1
- 系统注解: 系统提供的注解
- 元注解: 为注解所注解
系统注解
@override
被修饰的方法必须为父类方法重写, 标示为该方法是方法重写
@Deprecated
被修饰的方法的方法名出现删除线, 标示为该方法已被废弃, 该修饰有继承性, 父类拥有所有子类都将被废弃.
@SuppressWarnings(可变参数)
解除编译器的警告, 提供多种参数
元注解
元注解的作用就是负责注解其他注解
@Target(可变参数)
规定注解的作用范围
@Retention(可变参数)
规定注解的生命周期时间
@Documented
注解会在生成Doc文档时保留注解
@Inherited
规定注解被子类继承, 该注解只能修饰类, 且类必须被@Retention(RetentPoicy.Runtime)
修饰
依赖注入
依赖:自定义一个注解, 在运行期使用注解参数.
自定义注解
@interface
类型的代码块就是注解, 与接口和类是同一级别
注意
- 参数成员类型只能是基本类型, 即int, float..等
- 成员访问权修饰符和接口
interface
一样, 默认public
示例:
注解
@Target(ElementType.FIELD)
// 这里必须保证注解是生命周期是运行时, 因为反射是运行时才生效, 如果注解再运行时之前就被擦除,反射将无法获取注解的参数
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
String value(); // 和接口的成员
}
工具方法
public static void parseAnnotation(Object obj) throws IllegalAccessException {
System.out.println("进入");
Class<? extends Object> objClass = obj.getClass();
Field[] fields = objClass.getFields();
System.out.println(fields.length);
for (Field field : fields) {
System.out.println("循环");
// 判断该字段是否存在CustomAnnotation注解
if (field.isAnnotationPresent(CustomAnnotation.class)) {
System.out.println("运行");
// 得到该注解对象
CustomAnnotation customAnnotation = field.getAnnotation(CustomAnnotation.class);
// 得到注解的成员
String value = customAnnotation.value();
// 传入对象设置字段
field.set(obj, value);
}
}
}
因为我只需要执行java代码即可, 所以在测试类中执行
public class ExampleUnitTest {
@CustomAnnotation("程序吴彦祖")
public String name ;
@Test
public void addition_isCorrect() throws Exception {
ParseAnnotation.parseAnnotation(this);
System.out.println(name);
}
}
结果:
如果注解有多个成员方法, 即完整注解
, 则在注解的时候需要规定格式方法名 = 值
@CustomAnnotation(value = "程序吴彦祖", number = 4)
public String name;