1.注解
注解只是元数据,不包含任何业务逻辑;
运行时存在的注解,会在类加载时被加载进类对象;
反射提供了类、方法和字段对象;
拦截器通过反射拿到几种对象,通过getAnnotation()可以获取注解对象;从而消费注解中携带的参数;
2.拦截器
拦截器基于java的反射机制;
拦截器在Servlet和Controller控制器之间执行;
拦截器拦截action请求;
拦截器可以获取IOC容器中的各个bean;
拦截器需要注册到InterceptorRegistry中;
3.拦截器获取Controller类及方法上的注解
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 是否SpringMVC请求
if(handler instanceof HandlerMethod){
// 强转
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 获取类对象
Class<?> beanType = handlerMethod.getBeanType();
if(beanType.isAnnotationPresent(AccessLimit.class)) {
AccessLimit accessLimit = beanType.getAnnotation(AccessLimit.class);
if (accessLimit != null) {
// xxxx
}
}
// 获取方法对象
Method method = handlerMethod.getMethod();
// 判断方式是否有AccessLimit注解
if (method.isAnnotationPresent(AccessLimit.class)) {
// 获取注解上的内容
AccessLimit accessLimit = method.getAnnotation(AccessLimit.class);
if (accessLimit != null) {
// xxx
}
}
}
return true;
}版权声明:本文为qq_34077930原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。