springboot拦截器中注入service失败问题

本文探讨了在Spring框架中,由于错误地直接使用new创建拦截器实例而非通过Spring容器管理,导致Service注入失败的问题。文章提供了正确的配置方法,避免拦截器中的Service为null,确保应用正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:代码自相矛盾了。

拦截器用了 @Component,使用时 却直接new对象,new的不被Spring容器管理。所以service为null了。

很尴尬。

 

/**
     * 自定义拦截规则
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns - 用于添加拦截规则
        // excludePathPatterns - 用户排除拦截
        NewsInterceptor requestLogInterceptor = new NewsInterceptor();
        registry.addInterceptor(requestLogInterceptor).addPathPatterns("/**");
    }

@Component
public class NewsInterceptor implements HandlerInterceptor {

    public static final String COOKIE_ID_NAME = "jtn_global_cookie_id";

    @Autowired
    private JtnRequestLogService jtnRequestLogService;

 

}

------------------------------以下参考https://www.cnblogs.com/pomfor/p/10411945.html

一般都是因为除了在拦截器之外,还需要在拦截器的配置类中,注册拦截器时没有使用spring的bean,而是使用了new创建bean造成的。

 

可参考:http://blog.csdn.net/wmh13262227870/article/details/77005920

当然,部分版本也支持以下方式:

@Configurationpublic 
class WebInterceptorLoader extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter{
//这里可以自动注入下interceptor

     @Autowired

private UserAuthInterceptor userAuthInterceptor;


@Override 
public void addInterceptors(InterceptorRegistry registry){

//注意这里不要使用 new UserAuthInterceptor() ,否则就会出现拦截器里无法注入service的问题 
registry.addInterceptor(userAuthInterceptor).addPathPatterns("/**").excludePathPatterns("/components/*/*","/user-auth/quit");
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值