一、JDK 自带注解:
@Override //表示覆盖或重写父类的方法
@Deprecation //表示过时的方法
@SuppressWarnings("deprecation") //表示忽略过时方法所带的警告
二、注解的分类
1、按运行机制,注解可分为三类:
1. 源码注解(只在源码存在)
2. 编译注解(在class文件中也存在)
3. 运行时注解(在运行阶段仍然起作用)
2、按照来源,注解可分为三类:
1. JDK自带的注解(如:@Override、@Deprecated、@SuppressWarnings)
2. 第三方的注解(如:@Autowired、@Service……)
3. 自定义注解(自己编写的注解)
三、自定义注解:
1、 元注解
@Target //注解的作用域 :表示该注解可以用于一个类中的哪些属性及方法上,如果作用域类型有多个用英文逗号分隔
@Retention //表示该注解的生命周期
@Documented //表示生成javadoc的时候会包含注解
@Inherited //表示当前注解可以由子注解来继承
2、自定义注解
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface UserAnnotation{ //使用 @interface 定义注解
public String name(); //成员以无参无异常方式声明
public int id() default 0; //可以用default指定默认值
}
3、解析注解
public class TestAnnotation {
@UserAnnotation(id=2018,name="zhangsan")
public Object obj;
public static void main(String[] args) throws Exception {
Field objField = TestAnnotation.class.getField("obj");
UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);
System.out.println(ua.id()+","+ua.name());
//获得注解自己的注解
Target t = ua.annotationType().getAnnotation(Target.class);
ElementType[] values = t.value();
System.out.println(Arrays.toString(values));
}
}