溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis攔截器無法注入spring?bean怎么解決

發布時間:2022-02-07 10:11:35 來源:億速云 閱讀:432 作者: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對象目的是要查詢當前代碼的執行環境是生產還是測試環境。

因為生產者代碼不需要在測試環境執行,這個區分的數據存在數據庫里面?!?/p>

最初,我通過@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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女