Annotation - juedaiyuer/researchNote GitHub Wiki
#注解#
从某种角度来说,注解可以看成为一个XML元素,
##JDK自带注解##
自定义一个Person接口
package ann;
public interface Person {
public String name();
public int age();
public void sing();
}
自定义一个rose类实现Person接口
package ann;
public class rose implements Person {
@Override
public String name() {
// TODO Auto-generated method stub
return null;
}
@Override
public int age() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void sing() {
// TODO Auto-generated method stub
}
}
@Override:用来修饰此方法覆盖了父类的方法
@Deprecated:标注该方法已经过时,如果调用该方法,会在该方法上有一个划线
@suppvisewarnings:标注可以解决@Deprecated标注的方法
##第三方注解##
spring注解
@Autowired
@Service
@Repository
Mybatis注解
@InsertProvider
@UpdateProvider
@Options
##注解分类##
按照运行机制
源码注解
编译时注解(JDK自带注解属于这个范畴)
运行时注解(spring的@Autowired)
##自定义注解##
元注解
元注解在java.lang.annotation包中可以找到
@Target({ElementType.METHOD,ElementType.TYPE})
- Target说明了Annotation所修饰的对象范围
对象范围
构造方法声明 CONSTRUCTOR
字段声明 FIELD
局部变量声明 LOCAL_VARIABLE
方法声明 METHOD
包声明 PACKAGE
参数声明 PARAMETER
类,接口(包括注解类型)或enum声明 TYPE
@Retention(RetentionPolicy.RUNTIME)
生命周期
SOURCE,CLASS,RUNTIME
@Inherited // 允许子注解继承
@Documented //生成javadoc时会包含注解
自定义注解
元注解
public @interface 注解名
{
定义体
}
使用自定义注解
@<注解名>(<成员名1>=<值>,<成员名2>=<值>...) //调用注解并且赋值
##解析注解##
通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行时的逻辑
-
通过类加载器加载类
class c = Class.forName("...")
-
判断注解是否存在
c.isAnnotationPresent(注解.class)
-
拿到注解实例
c.getAnnotation(注解.class)
source:
- imooc 全面解析java注解
- 竹子-博客