最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis攔截器無法注入spring bean的問題解決

 更新時間:2022年02月04日 10:34:04   作者:康納醬  
本文主要介紹了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)境是生產還是測試環(huá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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

马关县| 屯留县| 潼关县| 宜春市| 南涧| 五家渠市| 玉田县| 定远县| 永修县| 广丰县| 祥云县| 新竹县| 乐至县| 嘉黎县| 长白| 商城县| 安国市| 虹口区| 英吉沙县| 七台河市| 于都县| 沐川县| 清镇市| 张家港市| 康定县| 昌宁县| 曲水县| 股票| 濮阳县| 彭水| 衡水市| 延边| 塔河县| 南汇区| 从化市| 敦煌市| 五寨县| 木兰县| 和田县| 夏邑县| 鞍山市|