mybatis攔截器無法注入spring bean的問題解決
公司要整合rabbitmq與mybatis攔截器做一個(gè)數(shù)據(jù)同步功能。
整合過程中大部分環(huán)節(jié)都沒什么問題,就是遇到了mybatis攔截器
@Intercepts(@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}))
@Component
public class MyBatisInterceptor implements Interceptor無法通過注解進(jìn)行注入一些持久層的dao對(duì)象,導(dǎo)致dao一直取到空值。
取dao對(duì)象目的是要查詢當(dāng)前代碼的執(zhí)行環(huán)境是生產(chǎn)還是測試環(huán)境。
因?yàn)樯a(chǎn)者代碼不需要在測試環(huán)境執(zhí)行,這個(gè)區(qū)分的數(shù)據(jù)存在數(shù)據(jù)庫里面?!?/p>
最初,我通過@Autowired是行不通的,因?yàn)?/p>

所以我繼續(xù)尋找方法,于是我找到了用ApplicationContext的方式獲取spring容器企圖劍走偏鋒

結(jié)果發(fā)現(xiàn)每一次執(zhí)行ClassPathXmlApplicationContext都會(huì)導(dǎo)致容器重新加載,但是我這個(gè)MyBatisInterceptor帶了@Component也會(huì)跟著重新加載,導(dǎo)致isGrey清空

甚至導(dǎo)致RabbitmqConfig這個(gè)類也跟著重新加載

導(dǎo)致這個(gè)監(jiān)聽容易一直重新加載,斷點(diǎn)一直進(jìn)入,這里有用到messageListener這個(gè)消息監(jiān)聽器也是一個(gè)單例bean對(duì)象,也會(huì)重新加載


所以會(huì)導(dǎo)致測試的時(shí)候出現(xiàn)bug,因?yàn)檫@個(gè)系統(tǒng)環(huán)境信息sysEnvInfo只需要加載一次
所以ApplicationContext這個(gè)方式也是走不通,我不推薦。
思來想去,我發(fā)現(xiàn) mybatis攔截器 具體實(shí)現(xiàn)邏輯的方法 produceSqlData 里面我用的是 SpringBeanUtils.getBean 方法就能獲取得到數(shù)據(jù),

RabbitTemplate是定義在RabbitmqConfig代碼里的,RabbitmqConfig這個(gè)類是個(gè)@Configuration注解

但是獲取的數(shù)據(jù)是通過@Bean方式獲取的,SpringBeanUtils.getBean無法獲取到sqlSessionFactory

這里面的dao對(duì)象,所以直接
也會(huì)報(bào)錯(cuò),提示sysEnvInfoDao沒有被定義。
所以我思索了下,在@Configuration可以@Autowired成功,那我為何不參考rabbitTemplate一樣把sysEnvInfo也變成一個(gè)bean的單例對(duì)象呢?
于是我將SysEnvInfo如rabbitTemplate一樣配置成了單例bean對(duì)象,通過@Bean注解

在MyBatisInterceptor里面通過SpringBeanUtils.getBean方式獲取,最后實(shí)踐可行,不會(huì)出現(xiàn)重復(fù)加載容器的問題,也能在攔截器中取到spring bean

到此這篇關(guān)于mybatis攔截器無法注入spring bean的問題解決的文章就介紹到這了,更多相關(guān)mybatis攔截器無法注入spring bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot集成logback打印彩色日志的代碼實(shí)現(xiàn)
Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開源日志組件,默認(rèn)情況下,Spring?Boot會(huì)用Logback來記錄日志,并用INFO級(jí)別輸出到控制臺(tái),本文給大家介紹了SpringBoot集成logback打印彩色日志,需要的朋友可以參考下2024-03-03
Java實(shí)現(xiàn)隊(duì)列的三種方法集合
這篇文章主要介紹了Java實(shí)現(xiàn)隊(duì)列的三種方法集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
SpringBoot實(shí)現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Spring+quartz實(shí)現(xiàn)定時(shí)發(fā)送郵件功能實(shí)例
spring提供的定時(shí)發(fā)送郵件功能一直深受廣大web開發(fā)者的喜愛,這篇文章主要介紹了Spring+quartz實(shí)現(xiàn)定時(shí)發(fā)送郵件功能實(shí)例,有興趣的可以了解一下。2017-03-03
springboot配置文件如何實(shí)現(xiàn)多個(gè)yml相互讀取問題
在SpringBoot應(yīng)用中,可以通過多種方式實(shí)現(xiàn)多個(gè)YAML配置文件的相互讀取和組合,SpringBoot2.4及以上版本可以使用spring.config.import屬性導(dǎo)入其他配置文件,@PropertySource注解雖不支持YAML2024-11-11

