Java提供了四种元注解来注解其他注解
- @Target
- @Retention
- @Inheried
- @Documented
较为重要的是前面2个,target和retention,下面分别一个一个解释其用途。
@Target:
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
- ElementType.CONSTRUCTOR:用于描述构造器
- ElementType.FIELD:用于描述域
- ElementType.LOCAL_VARIABLE:用于描述局部变量
- ElementType.METHOD:用于描述方法
- ElementType.PACKAGE:用于描述包
- ElementType.PARAMETER:用于描述参数
- ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention:
作用:用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
- RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译时被丢掉
- RetentionPolicy.CLASS:在class文件中有效(即class保留),但会被VM丢弃(默认)
- RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
@Inherited
指定子类可以继承父类的注解,只能是类上的注解,方法和字段的注解不能继承。即如果父类上的注解是@Inherited修饰的就能被子类继承。
@Documented
作用:指定被标注的注解会包含在javadoc中,即对应的方法生成javadoc的API文档时,会显示有这样的注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface testDoc {
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface testNoDoc {
}
public class Demodoc {
@testDoc
public void test(){
}
@testNoDoc
public void testNoDoc(){
}
}
上述代码生成javadoc后,如下图
[图片上传失败...(image-d73013-1515656945658)]
SpringMVC自定义注解需要在配置文件中添加注解代理
<!-- <mvc:annotation-driven/> -->
<aop:aspectj-autoproxy proxy-target-class="true" />
下图为Java注解的基础知识点导图
参考地址:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html