zoukankan      html  css  js  c++  java
  • 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法

    最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个DAO,准备下面作相应操作,拦截器代码:

    public class TokenInterceptor implements HandlerInterceptor {
        @Autowired
        private ITokenDao tokenDao;
        
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
         
        }
        
        ...
    }

    配置信息代码:

    @Configuration
    public class InterceptorConfig extends WebMvcConfigurerAdapter {
        
        /**
         *
         * @param registry
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new TokenInterceptor())
                    .excludePathPatterns("/user/login");
            super.addInterceptors(registry);
        }
    
    }

    看似没有问题,但运行结果发现Token拦截器中注入的DAO为null。

    原因

    造成null的原因是因为拦截器加载是在springcontext创建之前完成的,所以在拦截器中注入实体自然就为null。

    解决

    解决方法就是让bean提前加载,将配置信息修改为如下:

    @Configuration
    public class InterceptorConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        public HandlerInterceptor getTokenInterceptor(){
            return new TokenInterceptor();
        }
        
        /**
         *
         * @param registry
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(getTokenInterceptor())
                    .excludePathPatterns("/user/login");
            super.addInterceptors(registry);
        }
    
    }

    重新运行DAO即可注入成功。

  • 相关阅读:
    vue生命周期详细解析
    Chrome浏览器中onunload有时候没反应怎么办
    JavaScript中<button>与<input type="button"..的区别
    java泛型
    hashCode与equals
    HttpClient HttpServlet HttpUrlConnection
    think in java 笔记
    红黑树
    AC自动机
    并查集
  • 原文地址:https://www.cnblogs.com/weknow619/p/8549566.html
Copyright © 2011-2022 走看看