通过自定义注解拦截,一般注解都在方法上标注。有时候,整个Controller都需要拦截,一个个加觉得怪麻烦的。那么我们声明注解时可以让注解作用在类上。
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface IpCheck {
String type() default "WHITE_LIST";
}
在拦截器获取注解时,可优先从方法提取,提取不到再从类上提取
protected <A extends Annotation> A getAnnotation(Object handler, Class<A> annotationType) {
if (!(handler instanceof HandlerMethod)) {
return null;
}
HandlerMethod handlerMethod = ((HandlerMethod) handler);
A a = handlerMethod.getMethodAnnotation(annotationType);
if (a == null) {
//判断类是否有注解
a = handlerMethod.getBeanType().getAnnotation(annotationType);
}
return a;
}