@Target(ElementType.TYPE)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface Action {
boolean isSingle() default true;
String value() default "";
String url() default "";
}
@Action
class BaseController{
}
public class UserController extends BaseController{
public static void main(String[] args) {
System.out.println(UserController.class.isAnnotationPresent(Action.class)); //true
System.out.println(BaseController.class.isAnnotationPresent(Action.class)); //true
}
}
我们现在已经可以自己创建注解,接下来我来给大家介绍如何获取注解的信息。在java中是通过反射来获取注解的信息的,在Class,Method,Field,Constructor中都有如下的这几个方法:
getAnnotations()获取所有的注解,
getDeclaredAnnotations获取所有声明的注解,忽略inherited来的注解,
getAnnotations(Class<A> annotationclass)获取指定类型的注解,
isAnnotationPresent(Class<A> annotationclass)判断是否有指定类型的注解。
在java中Method和Contructor都有方法参数,而参数也是可以有注解的,所以有一个方法返回参数的注解:getParameterAnnotations()返回值是一个二维数组。我们来看一个例子: