SpringBoot拦截器中service或者redis注入为空的问题

原文:https://my.oschina.net/u/1790105/blog/1490098

这两天遇到SpringBoot拦截器中Bean无法注入问题。下面介绍我的思考过程和解决过程:

1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的。在网络的某个角落看到这样的说法:

SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
“Application类”是指SpringBoot项目入口类。这个类的位置很关键:
如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,则不会被扫描!
即, 把Application类放到dao、service所在包的上级,com.boot.Application
知道这一点非常关键,不知道spring文档里有没有给出说明,如果不知道还真是无从解决。

我出问题的类确实在Application类子包下面,看来不是这方面问题。

2.开始意识到只是拦截器上会有这样的问题,查询原因应该是:

拦截器执行在自动bean初始化之前导致这个问题的。

那就只是在拦截器中出现该问题了,解决办法如下:

首先上图是我的拦截器和要注入的iRedisUtil对象,出问题的就是这个iRedisUtil。

要解决问题是在项目中继承“WebMvcConfigurerAdapter”类的类中添加拦截器类作为一个Bean,如下:

现在去运行,发现iRedisUtil对象有值了。

时间: 2024-10-22 04:21:56

SpringBoot拦截器中service或者redis注入为空的问题的相关文章

SpringBoot拦截器中Bean无法注入(转)

这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!"Application类&

SpringBoot的拦截器中依赖注入报空指针问题

原因:拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null : 解决方法:配置拦截器链的类中先注入这个拦截器,示例: @Configuration public class WebConfig extends WebMvcConfigurerAdapter { //注入拦截器类 @Bean public LocaleInterceptor localeInterceptor  () { return new LocaleInterceptor(); } publi

springboot拦截器注入bean失败实例

如题,在spring拦截器中注入了一个service,结果运行时报了空指针: 2020-01-03 09:26:33.646 |-DEBUG [http-nio-9988-exec-3] org.springframework.web.servlet.DispatcherServlet [1100] -| Failed to complete request: java.lang.NullPointerException 2020-01-03 09:26:33.648 |-ERROR [http

【MARK】拦截器中自动注入失败问题

我在拦截器中想自动注入一个对象的时候发现无法注入,获取到的一直是null public class RestInterceptor implements HandlerInterceptor { @Autowired private EscUserMapper escUserMapper; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object hand

springboot 拦截器与servlet的过滤器

springboot 是spring框架的二次升华,简化了配置,提高了开发效率.拦截器是spring 提供的基于AOP思想的实现.过滤器filter是servlet的API,比较依赖servlet,他们有不同也有一些相似的地方. 1Filter基于servlet ,主要用于servlet存在的环境.拦截器用于servlet,也可以用于其他环境中. 2Filter是servlet规范来提供支持,拦截器是spring框架来提供支持. 3Filter的使用主要在servlet的前后,拦截器可以深入到每

spring boot拦截器中获取request post请求中的参数

最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取到参数,post是不行的,后来想到了使用流的方式,调用request.getInputStream()获取流,然后从流中读取参数,如下代码所示: String body = ""; StringBuilder stringBuilder = new StringBuilder(); Buf

SpringBoot 拦截器/过滤器/监听器

SpringBoot 拦截器 | 过滤器 | 监听器 1.拦截器:拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略.一般用于拦截用户登录,用户验证等. 2.过滤器:它可以对客户的请求进行处理.处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止.一般用于对数据的处理. 3.监听器: 配置拦截器: 实现的 HandlerInterc

struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题

<interceptor-ref name="fileUpload"> <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/pjpeg</param> <!-- 图片不能大于5M --> <param name="maximumSize">5242880</param> </

SpringMVC拦截器中通过反射得到Controller方法注解时ClassCastException解决方案

错误应用场 在Controller中,我们自定义了一个@Auth注解来实现权限控制功能,如: @Auth(verifyLogin=false,verifyURL=false) @RequestMapping("/login") public ModelAndView login(HttpServletRequest request,HttpServletResponse response) throws Exception{ Map<String,Object> conte