标签:java 元注解
java注解
1.分类
1.1 按运行机制分类
1.1.1 源码注解SOURCE:只有源码中存在,编译后的class文件中就不存在了
1.1.2 编译时注解CLASS:在源码和class文件中都存在
1.1.3 运行时注解RUNTIEM:运行时存在
1.2 按来源分类
1.2.1 来自JKD的注解,如:@Override,@Deprecated等
1.2.2 来自第三方的注解,如:@AutoWired @Service
1.2.3 自定义注解
1.3 元注解:注解的注解
2.解析注解
2.1 概念:通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑
* 元注解描述:
* 1.@interface 自定义注解的关键字
* 2.@Target 作用域 如方法上,类上,变量上,等
* 3.@Retention 生命周期:.源代码,编译时,运行时
* 4.@Inherited 子类是否也有效
* 5.@Documented javaDoc上
3.代码示例
import java.lang.annotation.*;
/**
* 自定义注解
*
* 元注解描述:
* 1.@interface 自定义注解的关键字
* 2.@Target 作用域 如方法上,类上,变量上,等
* 3.@Retention 生命周期:.源代码,编译时,运行时
* 4.@Inherited 子类是否也有效
* 5.@Documented javaDoc上
*/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
// 1.无参数无异常
// 2.可以没有成员变量
// 3.如果只有一个成员时,默认用value()
// 4.成员类型是受限的,包括原始类型及String,Class,Annotation,Enumeration
String value();
// String name();
// int age() default 18;
}
通常是通过反射来解析注解,以达到相应要求.
Class c = Class.forName(classname); // 1.通过类的加载器加载类
// 判断注解指定的注解是否存在
boolean isExists = c.isAnnotationPresent(Table.class);
c.getAnnotation(Table.class);
Method[] mes = c.getDeclaredMethods();
Field[] fields = c.getDeclaredFields();
标签:java 元注解
原文地址:http://881206524.blog.51cto.com/10315134/1898576