SpringBoot的拦截器中依赖注入为null的解决方法
该项目是基于SpringBoot框架的Maven项目。
今天在拦截器中处理拦截逻辑时需要使用注解调用其他方法 并且要从配置文件中读取参数。所以我使用了以下注解:
@Reference CoreRedisService redisService; @Value("${channel}") private String channel; @Value("${allowMethod}") private String allowMethod;
一个是获取接口的引用,两外两个是获取配置文件中的参数,
但是在debug过程中发现三个都没有注入进来出现了下图所示的情况:
可以看到三个值都为null。
然后我查看了我项目的配置,确定该拦截器的位置是否在注解的范围内。发现没问题, 百度了一下,发现了有个问题:拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null
根据解决方法在配置拦截器链的类中先注入这个拦截器,代码如下:
package com.***; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * 配置拦截器链 * Created by yefuliang on 2017/10/23. */ @Configuration public class bgqWebAppConfigurer extends WebMvcConfigurerAdapter { @Bean public bgqCommonInterceptorl bgqCommonInterceptorl() { return new bgqCommonInterceptorl(); } public void addInterceptors(InterceptorRegistry registry) { // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(bgqCommonInterceptorl()).addPathPatterns("/**"); super.addInterceptors(registry); } }
注意注入的是拦截器类,不是你拦截器里面要注入的类,然后拦截器链的 registry.addInterceptor(bgqCommonInterceptorl()).addPathPatterns(“/**”);
里面的第一个参数就不需要你再重新new一个了。
改好之后debug:
可以看到,都注入了进来,问题解决。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
spring依赖注入知识点分享
spring与IoC IoC:控制反转,将由代码操纵的对象控制权,交给第三方容器,反转给第三方容器.这种对象依赖的关系管理方式,称作 IoC.IoC是一个思想,概念.比较 著名的两种方式: DL(Dependency Lookup)依赖查找,典型的是JNDI.java名称与服务接口. DI(Dependency Injection)依赖注入.是目前最优秀的接耦合方式.典型应用spring. spring的DI 依赖注入,即:为属性赋值. xml实现 1)设值注入 底层调用属性的setter方法进
-
浅谈Spring IoC容器的依赖注入原理
本文介绍了浅谈Spring IoC容器的依赖注入原理,分享给大家,具体如下: IoC容器初始化的过程,主要完成的工作是在IoC容器中建立 BeanDefinition 数据映射,并没有看到IoC容器对Bean依赖关系进行注入, 假设当前IoC容器已经载入用户定义的Bean信息,依赖注入主要发生在两个阶段 正常情况下,由用户第一次向IoC容器索要Bean时触发 但我们可以在 BeanDefinition 信息中通过控制 lazy-init 属性来让容器完成对Bean的预实例化,即在初始化的过程中就
-
Spring bean的实例化和IOC依赖注入详解
前言 我们知道,IOC是Spring的核心.它来负责控制对象的生命周期和对象间的关系. 举个例子,我们如何来找对象的呢?常见的情况是,在路上要到处去看哪个MM既漂亮身材又好,符合我们的口味.就打听她们的电话号码,制造关联想办法认识她们,然后...这里省略N步,最后谈恋爱结婚. IOC在这里就像婚介所,里面有很多适婚男女的资料,如果你有需求,直接告诉它你需要个什么样的女朋友就好了.它会给我们提供一个MM,直接谈恋爱结婚,完美! 下面就来看Spring是如何生成并管理这些对象的呢? 1.方法入口 o
-
spring依赖注入原理与用法实例分析
本文实例讲述了spring依赖注入原理与用法.分享给大家供大家参考,具体如下: 一 点睛 控制反转和依赖注入在Spring环境下是等同的概念,控制反转是通过依赖注入实现的.所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖. 依赖注入的主要目的是为了解耦,体现一种组合的概念.如果你希望你的类具备某项功能的时候,是继承自一个具有次功能的父类好呢?还是组合另外一个具有此功能的类好呢?答案是不言而喻的,继承一个父类,子类和父类耦合了,组合另外一个
-
理解Spring中的依赖注入和控制反转
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. IoC是什么 Ioc-InversionofControl,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内
-
详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
一.spring依赖注入使用方式 @Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byType的,如果存在多个同一类型的bean,则使用@Qualifier来指定注入哪个beanName的bean. 与JDK的@Resource的区别:@Resource是基于bean的名字,即beanName,来从spring的IOC容器查找bean注入的,而@Autowried是基于类型byType
-
SpringBoot的拦截器中依赖注入为null的解决方法
该项目是基于SpringBoot框架的Maven项目. 今天在拦截器中处理拦截逻辑时需要使用注解调用其他方法 并且要从配置文件中读取参数.所以我使用了以下注解: @Reference CoreRedisService redisService; @Value("${channel}") private String channel; @Value("${allowMethod}") private String allowMethod; 一个是获取接口的引用,两外两
-
spring中@Reference注入为空的解决方法
线上发生事故了 前天晚上上线一波,发生了一个挺有意思的事,昨天复盘了一下,今天分享一下. 晚上的时候,我负责的系统和收银系统同时上线一波(用的是Dubbo).然后很神奇的事情发生了,收银系统用@Reference注解注入我的接口,然后这个接口的实现类居然为空. 其实我们当时没排查出来是什么原因? 重启了一下就好了,毕竟重启大法好. 但本着不能给用户充钱的路上造成阻碍,还是要排查一波这个代理对象为空是如何造成的. 线上dubbo的版本为2.8.9,注意包名是(com.alibaba) 为了方便大家
-
SpringBoot的HandlerInterceptor中依赖注入为null问题
目录 SpringBoot HandlerInterceptor依赖注入为null 原因 解决方案 spring依赖注入对象为null 被注解的对象如下 在调用SparkSource时候使用了注入的方式 SpringBoot HandlerInterceptor依赖注入为null 原因 拦截器加载是在springcontext创建之前完成 解决方案 使用@Bean在拦截器初始化之前让类加载 1.在WebMvcConfigurer的自定义子类加载拦截类,代码如下: @Configuration p
-
关于SpringBoot拦截器中Bean无法注入的问题
问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! "Applicati
-
基于springboot拦截器HandlerInterceptor的注入问题
目录 springboot拦截器HandlerInterceptor的注入 一.问题描述 二.解决策略 三.知识总结 springboot HandlerInterceptor 拦截器匹配规则写错 导致 拦截器无效 拦截规则粟子 springboot拦截器HandlerInterceptor的注入 一.问题描述 项目启动后,拦截器下的注入为null,影响拦截器的逻辑操作.如下图: 二.解决策略 原因: 拦截器加载是在springcontext创建之前完成,详情可以看spring的拦截器加载过程及
-
SpringBoot实现拦截器、过滤器、监听器过程解析
这篇文章主要介绍了SpringBoot实现拦截器.过滤器.监听器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 过滤器 过滤器简介 过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术.如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应. 过滤器的使用 首
-
Spring拦截器中注入Bean失败解放方案详解
目录 简介 问题重现 解决方案 简介 说明 本文用示例介绍如何解决拦截器中注入Bean失败的问题. 场景 Token拦截器中需要用@Autowired注入JavaJwtUtil类,结果发现注入的JavaJwtUtil为Null. 原因 拦截器的配置类是以new JwtInterceptor的方式使用的,那么这个JwtInterceptor不受Spring管理.因此,里边@Autowired注入JavaJwtUtil是不会注入进去的. 问题重现 代码 application.yml server:
-
如何在Springboot实现拦截器功能
preHandle: 预先处理,在目标的controller方法执行之前,进行处理 postHandle: 在目标的controller方法执行之后,到达指定页面之前进行处理 afterCompletion: 在页面渲染之后进行处理 方法: 1.Springboot通过实现HandlerInterceptor接口实现拦截器 2.通过WebMvcConfigurer实现一个配置类,再通过@Configuration 注解注入到容器 3.指定拦截规则 以用户登录为案例,若用户没有登录session里
-
Springboot引入拦截器并放行swagger代码实例
这篇文章主要介绍了Springboot引入拦截器并放行swagger代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Springboot引入拦截器 自定义的拦截器类 Interceptor package cn.zytao.taosir.auth.config; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import j
-
springboot注册拦截器所遇到的问题
问题1 springboot注册拦截器过滤器方法 注册拦截器:在启动类中注册bean @EnableWebMvc @Configuration static class MvcConfigurer implements WebMvcConfigurer { //在拦截器中需要使用这个bean,如果直接在拦截器中注入的话会失败,所以选择有参构造的方式传入 @Autowired CacheService cacheService; @Override public void addIntercept
随机推荐
- AngularJS动态生成div的ID源码解析
- SQL Server中将查询结果转换为Json格式脚本分享
- jQuery选择器全集详解
- Windows server利用批处理脚本判断端口启动tomcat的方法
- java实现倒序读取文件功能示例分享
- C#(.NET)数据访问连接、查询、插入等操作的封装类
- JavaScript类型系统之Object详解
- 解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)
- PHP数学运算函数大汇总(经典值得收藏)
- PHP编程函数安全篇
- 最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
- 从JVM分析Java的类的加载和卸载机制
- redis实现简单队列
- 传智播客学习之java 反射
- 基于jQuery实现选取月份插件附源码下载
- php教程之phpize使用方法
- 用Java产生100个1-150间不重复数字
- JavaWeb 中Cookie实现记住密码的功能示例
- C#实现洗牌游戏实例
- c#使用S22.Imap收剑灵激活码邮件代码示例(imap收邮件)