一:基本语法:通过@interface关键字来定义一个注解
//定义一个注解
public @interface MYAnnotation{
}
@interface与class,enum一样,都是java的关键字,只是@interface用作定义注解
二:定义注解的参数集
//定义注解的参数
public @interface Myannotation{
String value();//使用该注解要传入该参数,不传入就会报错
String path() default "/ ";使用该注解要传入该参数,不传入不会报错,会使用默认值“/”
}
//!!定义参数时的括号是一种具体语法,不是方法来的,里面不可以传参数!
三:修饰注解的注解(元注解)
//四个元注解声明自定义注解的作用范围及时间
@Documented //生成javaAPI文档时也生效
@Target() //声明自定义注解的标注范围,可以是类,方法,变量等,具体参数可以查看ElementType枚举类的枚举项
@Retention() //声明自定义注解作用的范围,可以是运行时,编译时等,具体参考RetentionPolicy枚举类的枚举项
@inherit //声明继承某个标注了该自定义注解的类自动继承该注解
四:解析/使用注解(注解的底层是反射)
1.Spring可以通过AspectJ(aop)解析注解(反射),使用通知来织入注解信息
通过在Spring切面的通知上使用@annotation(xxx.class)注解,声明所有使用了某个注解的方法都将织入该切面
也可以通过handlerMethod.getMethod(注解.class),可以拿到对应的注解(有则返回该注解无则返回空)(handlerMethod是被SpringMVC封装过的method)(适用于在拦截器中使用)
2.手动解析
通过反射,获取到某个方法或类上是否有该注解,然后再自行处理