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

这两天遇到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对象有值了。

原文地址:https://www.cnblogs.com/shamo89/p/8534580.html

时间: 2024-11-05 18:58:43

SpringBoot拦截器中Bean无法注入(转)的相关文章

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

原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bea

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

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

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

springboot 拦截器与servlet的过滤器

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

spring中Bean的注入参数详解

字面值    一般指可用字符串表示的值,这些值可以通过<value>元素标签进行注入.在默认情况下,基本数据类型及其封装类.String等类型都可以采取字面值注入的方式,Spring容器在内部为字面值提供了编辑器,它可以将以字符串表示的字面值转换为内部变量的相应类型.    配置信息:    <bean id="car" class="com.luxl.domain.Car">        <property name="m

解决SpringMVC拦截器中Request数据只能读取一次的问题

解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request.getParameter()从Request中取数据. 但是有时候我们要在请求到具体的业务之前做一些操作比如日志记录.数据校验.统一的处理等等,可以在拦截器中处理. 由于 request中getReader()和getInputStream()只能调用一次,我们在拦截器中获取Request中数据后

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