mybatis攔截器無法注入spring bean的問題解決
公司要整合rabbitmq與mybatis攔截器做一個數(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對象,導(dǎo)致dao一直取到空值。
取dao對象目的是要查詢當(dāng)前代碼的執(zhí)行環(huán)境是生產(chǎn)還是測試環(huán)境。
因?yàn)樯a(chǎn)者代碼不需要在測試環(huán)境執(zhí)行,這個區(qū)分的數(shù)據(jù)存在數(shù)據(jù)庫里面?!?/p>
最初,我通過@Autowired是行不通的,因?yàn)?/p>
所以我繼續(xù)尋找方法,于是我找到了用ApplicationContext的方式獲取spring容器企圖劍走偏鋒
結(jié)果發(fā)現(xiàn)每一次執(zhí)行ClassPathXmlApplicationContext都會導(dǎo)致容器重新加載,但是我這個MyBatisInterceptor帶了@Component也會跟著重新加載,導(dǎo)致isGrey清空
甚至導(dǎo)致RabbitmqConfig這個類也跟著重新加載
導(dǎo)致這個監(jiān)聽容易一直重新加載,斷點(diǎn)一直進(jìn)入,這里有用到messageListener這個消息監(jiān)聽器也是一個單例bean對象,也會重新加載
所以會導(dǎo)致測試的時候出現(xiàn)bug,因?yàn)檫@個系統(tǒng)環(huán)境信息sysEnvInfo只需要加載一次
所以ApplicationContext這個方式也是走不通,我不推薦。
思來想去,我發(fā)現(xiàn) mybatis攔截器 具體實(shí)現(xiàn)邏輯的方法 produceSqlData 里面我用的是 SpringBeanUtils.getBean 方法就能獲取得到數(shù)據(jù),
RabbitTemplate是定義在RabbitmqConfig代碼里的,RabbitmqConfig這個類是個@Configuration注解
但是獲取的數(shù)據(jù)是通過@Bean方式獲取的,SpringBeanUtils.getBean無法獲取到sqlSessionFactory
這里面的dao對象,所以直接
也會報錯,提示sysEnvInfoDao沒有被定義。
所以我思索了下,在@Configuration可以@Autowired成功,那我為何不參考rabbitTemplate一樣把sysEnvInfo也變成一個bean的單例對象呢?
于是我將SysEnvInfo如rabbitTemplate一樣配置成了單例bean對象,通過@Bean注解
在MyBatisInterceptor里面通過SpringBeanUtils.getBean方式獲取,最后實(shí)踐可行,不會出現(xiàn)重復(fù)加載容器的問題,也能在攔截器中取到spring bean
到此這篇關(guān)于mybatis攔截器無法注入spring bean的問題解決的文章就介紹到這了,更多相關(guān)mybatis攔截器無法注入spring bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
總結(jié)Java常用加解密方法AES?SHA1?md5
這篇文章主要為大家介紹了Java常用加密方法AES?SHA1?md5總結(jié)及示例demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06spring cloud 之 Feign 使用HTTP請求遠(yuǎn)程服務(wù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猻pring cloud 之 Feign 使用HTTP請求遠(yuǎn)程服務(wù)的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解
這篇文章主要介紹了SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解,@EnableWebSecurity是Spring?Security用于啟用Web安全的注解,典型的用法是該注解用在某個Web安全配置類上,實(shí)現(xiàn)了接口,需要的朋友可以參考下2023-12-12使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題
這篇文章主要介紹了使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03