spring boot如何获取类上面的注解
/***
* 用户登录拦截器
*
*/
@Slf4j
public class UserLoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private StringRedisTemplate stringRedisTemplate;
//过滤未登录用户
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("用户登录拦截器");
this.hasPermission(handler,request);
returntrue;
}
/**
* 是否有权限
*/
private boolean hasPermission(Object handler,HttpServletRequest request) {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 获取方法上的注解
PxCheckLogin pxCheckPermission = handlerMethod.getMethod().getAnnotation(PxCheckLogin.class);
}
return true;
}
}
如代码可以获取方法上的注解,但是类上的注解怎么判断呢 为啥你不尝试打个断点看看 HandlerMethod里面有什么呢 不都一个样嘛?
Annotation[] annotations = this.getClass().getAnnotations();
Test annotation = this.getClass().getAnnotation(Test.class); 使用spring 提供的aop (@Aspect) 自定义切面 Annotation[] annotations = this.getClass().getAnnotations();
Test annotation = this.getClass().getAnnotation(Test.class); 建议去看一下spring cache源码,看一下他们是怎么处理缓存上的注解的。我看了一两天,放弃了。caffeine 反射获取annotation就能拿到了,不用想那么复杂,方法的怎么获取这个也怎么获取就好了 HandlerMethod handlerMethod = (HandlerMethod) handler;
T classAnno = handlerMethod.getMethod().getDeclaringClass().getAnnotation(T.class); AnnotationUtils.getAnnotation() Spring自带的工具类获取注解 不用拿类的注解,用@Aspect就行,@Pointcut定义切点,@Around("pointcut()")处理你想切入的逻辑
页:
[1]
2