【已解决】Spring 拦截器中无法加载 service , 无法用 @Value 引用配置文件中的值

问题:

Spring 拦截器中无法使用 @Autowired 加载 service , 无法用 @Value 引用配置文件中的值。

解决方法:

1. 将拦截器在配置文件中以 Bean 的方式注入,不能用 new 的方式直接实例化调用。

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    public AuthInterceptor getAuthInterceptor() {
        return new AuthInterceptor();
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns()方法为需要拦截的api,excludePathPatterns()方法为不需要拦截的接口api
        registry.addInterceptor(getAuthInterceptor()).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
}

注意:以 Bean 的方式注入时,不能用 static ,不然还是会出现无法调用的问题。

2. 强制将类加载到 Spring 的上下文中,loginTickerService 为需要强制加载的类。

// 解决service为null无法注入问题
if (loginTickerService == null) {
    System.out.println("loginTickerService is null!!!");
    BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
    loginTickerService = (LoginTickerService) factory.getBean("loginTickerService");
}

原因:

拦截器的加载时间在Spring上下文之前加载,,所以需要提前将拦截器注册到Spring上下文中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值