mybatis拦截器无法注入spring bean的问题解决

 更新时间:2022年02月04日 10:34:04   作者:康纳酱  
本文主要介绍了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是行不通的,因为

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 到此这篇关于mybatis拦截器无法注入spring bean的问题解决的文章就介绍到这了,更多相关mybatis拦截器无法注入spring bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java老矣 尚能饭否?

    Java老矣 尚能饭否?

    Java老矣,尚能饭否?各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java 却露出了明显的颓势。这个老牌的语言,未来会是怎样?
    2017-06-06
  • Java并发线程池实例分析讲解

    Java并发线程池实例分析讲解

    这篇文章主要介绍了Java并发线程池实例,线程池——控制线程创建、释放,并通过某种策略尝试复用线程去执行任务的一个管理框架,从而实现线程资源与任务之间一种平衡
    2023-02-02
  • 总结Java常用加解密方法AES SHA1 md5

    总结Java常用加解密方法AES SHA1 md5

    这篇文章主要为大家介绍了Java常用加密方法AES SHA1 md5总结及示例demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • spring cloud 之 Feign 使用HTTP请求远程服务的实现方法

    spring cloud 之 Feign 使用HTTP请求远程服务的实现方法

    下面小编就为大家带来一篇spring cloud 之 Feign 使用HTTP请求远程服务的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java中isAssignableFrom的用法详解

    Java中isAssignableFrom的用法详解

    下面小编就为大家带来一篇Java中isAssignableFrom的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 基于java构造方法Vevtor添加元素源码分析

    基于java构造方法Vevtor添加元素源码分析

    这篇文章主要介绍了基于java构造方法中对Vevtor添加元素的源码分析,有需要的朋友可以借鉴参考下,希望可以对大家有所帮助,祝大家早日升职加薪
    2021-09-09
  • java 后端生成pdf模板合并单元格表格的案例

    java 后端生成pdf模板合并单元格表格的案例

    这篇文章主要介绍了java 后端生成pdf模板合并单元格表格的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Spring源码解析之推断构造方法

    Spring源码解析之推断构造方法

    今天给大家带来的是关于Java的相关知识,文章围绕着Spring推断构造方法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • SpringSecurity中的EnableWebSecurity注解启用Web安全详解

    SpringSecurity中的EnableWebSecurity注解启用Web安全详解

    这篇文章主要介绍了SpringSecurity中的EnableWebSecurity注解启用Web安全详解,@EnableWebSecurity是Spring Security用于启用Web安全的注解,典型的用法是该注解用在某个Web安全配置类上,实现了接口,需要的朋友可以参考下
    2023-12-12
  • 使用spring boot开发时java对象和Json对象转换的问题

    使用spring boot开发时java对象和Json对象转换的问题

    这篇文章主要介绍了使用spring boot开发时java对象和Json对象转换的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论