关于注解、拦截器的理解

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版权协议,转载请附上原文出处链接和本声明。