JAVA 注解详解及简单实例
JAVA注解详解及简单实例
何为注解
注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是:
生成文档 这是注解的原始用途,可以通过注解生成JavaDoc文档
跟踪代码的依赖性 可以通过注解替代配置文件,简化项目的配置。现有的许多框架都采用这个功能减少自己的配置。
编译检查 在编译时进行格式检查,例如@Override
基础注解
Java目前内置了三种标准注解,以及四种元注解。四种元注解负责创建其他的注解。
三种标准注解
@Override,表示当前的方法覆盖超类中的方法
@Deprecated,如果程序员使用被这个注解注释的元素,则编译器会进行提示
@SuppressWarnings,忽略编译器的警告
四种元注解
@Target,表示注解的适用范围,例如@Target(ElementType.FIELD).
ElementType的枚举值有
CONSTRUCTOR,用于构造方法
FIELD,用于字段声明,包括常量
LOCAL_VARIABLE,用于局部变量
METHOD,用于方法
PACKAGE,用于包声明
PARAMETER,用于参数声明
TYPE,用于类,接口
@Retention,表示注解的保留级别,例如@Retention(RetentionPolicy.RUNTIME).
RetentionPolicy的枚举值有
Source,注解将被编译器丢弃
Class,注解可以在class文件中使用,但是会被VM丢弃
Runtime,在VM的运行期间也会保留
@Document,将次注解在javaDoc文件中可见
@Inherited,允许子类继承父类中的注解
自定义注解
创建注解
packagecom.rainman.annotation;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public@interfaceMethodLog{
Stringmethod()default"dosomething";
Stringopeator()default"someone";
}
@interface标明该类型是一个注解的定义
对于“Stringmethod()default"dongsomething";”来说String是注解参数的数据类型,method是参数名,default用来设置默认值
注解的使用
packagecom.rainman.controller;
importcom.rainman.annotation.MethodLog;
publicclassCelebrateController{
@MethodLog(method="celebratebirthday",operator="we")
publicvoidcelebrateBirthday(){
}
@MethodLog(operator="we")
publicvoidcelebrateNewYears(){
}
@MethodLog(method="celebrateharvest")
publicvoidcelebrateHarvest(){
}
@MethodLog
publicvoidyeah(){
}
}
注解使用的格式为"@Annotation(para=xxxx,...)",Annotation是注解名,para是注解中设置的参数名,参数如果不设置值,则会使用默认值
设置注解解析器
packagecom.rainman.annotation;
importcom.rainman.controller.CelebrateController;
importjava.lang.reflect.Method;
publicclassMethodLogParse{
publicstaticvoidparse(ClassclassType)throwsException{
Method[]array=classType.getMethods();
for(Methodmethod:array){
System.out.println("=================="+method.getName()+"=================");
if(method.isAnnotationPresent(MethodLog.class)){
MethodLogmethodLog=method.getDeclaredAnnotation(MethodLog.class);
Stringstr=String.valueOf(methodLog.operator());
Stringstr1=String.valueOf(methodLog.method());
System.out.println(str+""+str1);
}
}
}
publicstaticvoidmain(String[]args){
try{
MethodLogParse.parse(CelebrateController.class);
}catch(Exceptione){
e.printStackTrace();
}
}
}
输出结果为
==================celebrateBirthday================= wecelebratebirthday ==================yeah================= someonedosomething ==================celebrateNewYears================= wedosomething ==================celebrateHarvest================= someonecelebrateharvest ==================wait================= ==================wait================= ==================wait================= ==================equals================= ==================toString================= ==================hashCode================= ==================getClass================= ==================notify================= ==================notifyAll=================
通过反射机制,遍历方法,然后获取方法的注解。注解可以注解类,方法,字段等等,所以也可以通过类似的方式获取这些对象的注解,然后进行处理。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!