一,jdk中的内置注解
@Override 被标记的方法必须覆盖父类或者父接口的方法,否则编译不通过
@Deprecated 用于标记已经过时的方法
@SuppressWarings 用于抑制编译器警告,被标记的地方编译时期不会出现警告
@SafeVarargs 抑制堆污染警告,可以抑制使用泛型时出现的警告
二,元注解
元注解是描述注解的注解。
@Target 该注解定义注解的作用域,作用域如下
@Retention 该注解定义注解存活的作用域,一共有三个存活的作用域,Source,Class,Runtime。其中Runtime存活时间最久,我们自定义注解存活作用域必须是Runtime
@Documented 被该标记标注的注解在制作javadoc的时候也会保留进去
@Inherited 被该注解标记的注解具有继承性,如果被标记的类有子类,通过反射可以从子类上获取同样的注解
三,如何开发自定义注解
1,编写自己自义的注解类
2,编写注解解析类
3,编写注解所处理类
以模拟单元测试注解为例,代码如下
packagecom.wzw.activemqstudy.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/*** 自定义注解类*/@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)public @interfaceMyTest {
}
packagecom.wzw.activemqstudy.annotation;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;/***自定义注解解析类*/
public classMyTestParse {public static void main(String[] args) throwsIllegalAccessException, InstantiationException, InvocationTargetException {//拿到测试类的字节码对象
Class clz = TestDemo.class;//通过反射得到所有方法对象
Method[] methods =clz.getMethods();if(null !=methods){for(Method method : methods) {//判断方法上是否有@MyTest注解标记
if(method.isAnnotationPresent(MyTest.class)){
method.invoke(clz.newInstance(),null);
}
}
}
}
}
packagecom.wzw.activemqstudy.annotation;/***自定义注解要处理的类*/
public classTestDemo {
@MyTestpublic voidtest1(){
System.out.println("运行test1.............");
}
@MyTestpublic voidtest2(){
System.out.println("运行test2...........");
}
@MyTestpublic voidtest3(){
System.out.println("运行test3...........");
}
}