温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mybatis拦截器无法注入spring bean怎么解决

发布时间:2022-02-07 10:11:35 来源:亿速云 阅读:395 作者:iii 栏目:开发技术

这篇文章主要介绍“mybatis拦截器无法注入spring bean怎么解决”,在日常操作中,相信很多人在mybatis拦截器无法注入spring bean怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis拦截器无法注入spring bean怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

公司要整合rabbitmq与mybatis拦截器做一个数据同步功能。

整合过程中大部分环节都没什么问题,就是遇到了mybatis拦截器

@Intercepts(@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}))
@Component
public class MyBatisInterceptor implements Interceptor

无法通过注解进行注入一些持久层的dao对象,导致dao一直取到空值。

取dao对象目的是要查询当前代码的执行环境是生产还是测试环境。

因为生产者代码不需要在测试环境执行,这个区分的数据存在数据库里面。 

最初,我通过@Autowired是行不通的,因为

mybatis拦截器无法注入spring bean怎么解决

所以我继续寻找方法,于是我找到了用ApplicationContext的方式获取spring容器企图剑走偏锋

mybatis拦截器无法注入spring bean怎么解决

结果发现每一次执行ClassPathXmlApplicationContext都会导致容器重新加载,但是我这个MyBatisInterceptor带了@Component也会跟着重新加载,导致isGrey清空

mybatis拦截器无法注入spring bean怎么解决

甚至导致RabbitmqConfig这个类也跟着重新加载

mybatis拦截器无法注入spring bean怎么解决

导致这个监听容易一直重新加载,断点一直进入,这里有用到messageListener这个消息监听器也是一个单例bean对象,也会重新加载

mybatis拦截器无法注入spring bean怎么解决

mybatis拦截器无法注入spring bean怎么解决

所以会导致测试的时候出现bug,因为这个系统环境信息sysEnvInfo只需要加载一次

所以ApplicationContext这个方式也是走不通,我不推荐。

思来想去,我发现  mybatis拦截器  具体实现逻辑的方法  produceSqlData  里面我用的是  SpringBeanUtils.getBean  方法就能获取得到数据,

mybatis拦截器无法注入spring bean怎么解决

RabbitTemplate是定义在RabbitmqConfig代码里的,RabbitmqConfig这个类是个@Configuration注解

mybatis拦截器无法注入spring bean怎么解决

但是获取的数据是通过@Bean方式获取的,SpringBeanUtils.getBean无法获取到sqlSessionFactory

mybatis拦截器无法注入spring bean怎么解决

这里面的dao对象,所以直接

也会报错,提示sysEnvInfoDao没有被定义。

所以我思索了下,在@Configuration可以@Autowired成功,那我为何不参考rabbitTemplate一样把sysEnvInfo也变成一个bean的单例对象呢?

于是我将SysEnvInfo如rabbitTemplate一样配置成了单例bean对象,通过@Bean注解

mybatis拦截器无法注入spring bean怎么解决

在MyBatisInterceptor里面通过SpringBeanUtils.getBean方式获取,最后实践可行,不会出现重复加载容器的问题,也能在拦截器中取到spring bean

mybatis拦截器无法注入spring bean怎么解决

到此,关于“mybatis拦截器无法注入spring bean怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI