一、spring中的一段代码:spring
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {数组
String value() default "";ide
boolean required() default true;ui
String defaultValue() default ValueConstants.DEFAULT_NONE;spa
}继承
二、内置注解接口
Java SE5内置了三种标准注解:ci
@Override,表示当前的方法定义将覆盖超类中的方法。get
@Deprecated,使用了注解为它的元素编译器将发出警告,由于注解@Deprecated是不同意使用的代码,被弃用的代码。编译器
@SuppressWarnings,关闭不当编译器警告信息。
三、用于建立的注解
Java还提供了4中注解,专门负责新注解的建立。
@Target |
表示该注解能够用于什么地方,可能的ElementType参数有: CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参数声明 TYPE:类、接口(包括注解类型)或enum声明 |
@Retention |
表示须要在什么级别保存该注解信息。可选的RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期间保留注解,所以能够经过反射机制读取注解的信息。 |
@Document |
将注解包含在Javadoc中 |
@Inherited |
容许子类继承父类中的注解 |
实例说明:
第一个注解类中,除了@符号,注解很像是一个接口。定义注解的时候须要用到元注解,上面用到了@Target和@RetentionPolicy,它们的含义在上面的表格中已经给出。
在注解中通常会有一些元素以表示某些值。注解的元素看起来就像接口的方法,惟一的区别在于能够为其制定默认值。没有元素的注解称为标记注解,如:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Test { }
注解的可用的类型包括如下几种:全部基本类型、String、Class、enum、Annotation、以上类型的数组形式。元素不能有不肯定的值,即要么有默认值,要么在使用注解的时候提供元素的值。并且元素不能使用null做为默认值。注解在只有一个元素且该元素的名称是value的状况下,在使用注解的时候能够省略“value=”,直接写须要的值便可。
四、定义与使用
定义
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UseItem { public String id(); public String desc() default ""; }
使用
public class A{ @UseCase(id = 101, desc= "A is a") //方法 @UseCase(id = 202) //方法 }
使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。注解处理器就是经过反射机制获取被检查方法上的注解信息,而后根据注解元素的值进行特定的处理。
m.getAnnotation();方法