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