一、注解概述
1、学习注解能够读懂别人的代码,特别是框架相关的代码
2、让自己的编程更加简洁,代码更加清晰
3、让别人高看一眼,会使用自定义注解来解决问题
4、概念:Java提供了一种原程序中的元素关联任何信息的任何元数据的途径和方法
二、Java中的常见注解 Annotation
1、JDK自带注解
@Override
@Deprecated 表示方法已经过时了,在方法上加一个中划线,
@Suppvisewarnings 表示忽略警告
2、常见第三方注解
Spring:@Autowired
@Service
@Repository
Mysbatis: @InsertProvider
@updateProvider
@Options
三、注解分类
1、按运行机制分:
源码注解: 注解只在源码中存在,编译成.class文件就不存在了。
编译时注解:注解在源码和.class文件中都存在
运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
2、按来源分:
JDK的注解
第三方的注解
自定义的注解
3、元注解:注解的注解
四、自定义注解
1、自定义注解的语法要求
成员类型是受限的,包括原始数据类型,String,Class,Annotation,Enumeration
如果注解只有一个成员,则成员名必须取名为value(),在使用时可以胡磊成员名和赋值 号(=)
注解可以没有成员,没有程员的注解称为标识注解
2、元注解
@Target 注解的作用域:构造方法、域、局部变量生命、方法、包、参数、类、接口
@Retention 注解的生命周期:SOURCE、CLASS、RUNTIME
@Inherited 允许子注解继承它
@Documented 生成JavaDoc时包含注解的信息
3、使用自定义注解
使用注解的语法:
@<注解名>(<成员名1>=<成员值1>,<>=<>,……)
4、解析注解
通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑
//1.使用类加载器加载类
Class c =Class.forName("要解析的类的全名");
//2.找到类上面的注解
boolean isExist = c.isAnnotationPresent(xxx.class);//xxx表示你要解析的注解的类名
if(isExist){
//3.拿到注解实例
xxx d =(xxx)c.getAnnotation(xxx.class);
System.out.println(d.value());
}
//4.找到方法上的注解
Method[] ms = c.getMethod();
for(Method m:ms){
boolean isMExist = m.isAnnotationPresent(xxx.class);
if(isMExist){
xxx d =(xxx)m.getAnnotation(xxx.class);
System.out.println(d.value());
}
//另一种解析方法
for(Method m:ms){
Annotation[] as = m.getAnnotation();
for(Annotation a: as){
if(a instanceOf xxx);
xxx d =(xxx)a;
System.out.println(d.value());
}
}
}
五、在实际项目中使用自定义注解来解决问题
如自己开发一个Hibernate
全面解析java注解
原文:http://www.cnblogs.com/rocomp/p/4776352.html