亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring聲明式事務和@Aspect的攔截順序問題的解決

2024-07-14 08:40:36
字體:
來源:轉載
供稿:網友

在使用AbstractRoutingDataSource配置多數據源時,發現使用@aspect配置的DataSourceSwitchAspect總是在聲明式事務之后執行,配置了Order依然不行,經過調研發現是由于兩者的aop代理方式不一致導致。

在spring內部,是通過BeanPostProcessor(《spring 攻略》一書中翻譯為,后處理器)來完成自動創建代理工作的。根據匹配規則的不同大致分為三種類別: 1、匹配Bean的名稱自動創建匹配到的Bean的代理,實現類BeanNameAutoProxyCreator 2、根據Bean中的AspectJ注解自動創建代理,實現類AnnotationAwareAspectJAutoProxyCreator 3、根據Advisor的匹配機制自動創建代理,會對容器中所有的Advisor進行掃描,自動將這些切面應用到匹配的Bean中,實現類DefaultAdvisorAutoProxyCreator

其中@Aspect聲明的aop是通過AnnotationAwareAspectJAutoProxyCreator進行代理的,而項目中的聲明式事務是BeanNameAutoProxyCreator方式進行代理的,經調試發現BeanNameAutoProxyCreator攔截優先級高于AnnotationAwareAspectJAutoProxyCreator,order配置只對同一類型的aop攔截方式起作用,如下:

DataSourceSwitchAspect

/** * 數據源切換切面 * @author Matchstick */@Aspect@Order(1) //確保該切面在transaction之前執行@Componentpublic class DataSourceSwitchAspect{ private Logger logger = LoggerFactory.getLogger(getClass());  @Pointcut("@annotation(com.etu.multidatasource.test.datasource.DataSourceId)") public void pointcut(){}  @Before("@annotation(dataSourceId)") public void switchDataSource(JoinPoint point, DataSourceId dataSourceId) { String dsId = dataSourceId.value(); MultiDataSourceContextHolder.setDataSourceId(dsId); logger.debug("switch datasource -> {}", dsId); } @After("@annotation(dataSourceId)") public void restoreDataSource(JoinPoint point, DataSourceId dataSourceId) { MultiDataSourceContextHolder.removeDataSourceId(); logger.debug("restore datasource -> {}",         MultiDataSourceContextHolder.getDefaultDataSourceId()); }}

DataSourceConfig

@Bean public BeanNameAutoProxyCreator txProxy() { BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator(); creator.setInterceptorNames("txAdvice"); creator.setBeanNames("*Service", "*ServiceImpl"); creator.setProxyTargetClass(true); creator.setOrder(2); return creator; }

解決方案:要么修改DataSourceSwitchAspect的aop方式為BeanNameAutoProxyCreator,要么修改事務aop方式為AnnotationAwareAspectJAutoProxyCreator,由于是通過注解實現的數據源切換aop,所以選擇了后者解決方案,如下:

DataSourceConfig

@Bean public AnnotationAwareAspectJAutoProxyCreator txProxy() { /*  * 必須使用AspectJ方式的AutoProxy,這樣才能和DataSourceSwitchAspect保持統一的aop攔截方式,否則不同的攔截方式會導致order失效  */ AnnotationAwareAspectJAutoProxyCreator c = new AnnotationAwareAspectJAutoProxyCreator(); c.setInterceptorNames("txAdvice"); c.setIncludePatterns(Arrays.asList("execution (public com.etu..*Service(..))")); c.setProxyTargetClass(true); c.setOrder(2); return c; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品www久久久久久广东| 久久精品国产精品| 国产一区二区动漫| 亚洲成人在线视频播放| 日韩免费中文字幕| 亚洲精品成a人在线观看| 日韩中文字幕在线看| 中文欧美日本在线资源| 国产精品日韩电影| 亚洲黄色成人网| 中文字幕少妇一区二区三区| 久久久久久久久网站| 日韩欧美一区二区三区久久| 国产精品人成电影在线观看| 精品国内亚洲在观看18黄| 一本色道久久88综合日韩精品| 亚洲黄色av女优在线观看| 久久激情视频免费观看| 亚洲一区二区久久久| 91在线精品视频| 国产视频精品久久久| 午夜精品久久17c| 欧美午夜精品久久久久久久| 欧美成在线视频| 国产精品久久久久久搜索| 久久精品电影一区二区| 成人字幕网zmw| 色久欧美在线视频观看| 一区二区三区动漫| 国产精品69av| 精品久久久久久久久久久久| 国产精品美女视频网站| 欧美色另类天堂2015| 精品国产乱码久久久久酒店| 欧美亚洲成人网| 姬川优奈aav一区二区| 国产精品成人久久久久| 在线观看国产成人av片| 久久久91精品国产| 欧美日韩国产影院| 国产91av在线| 久久99久久99精品免观看粉嫩| 成人免费看片视频| 日韩精品在线私人| 岛国av在线不卡| 欧美性xxxxx| 国产精品一区二区三区成人| 色播久久人人爽人人爽人人片视av| 国产精品美女久久久久av超清| 91精品国产综合久久香蕉922| 欧美大片在线影院| 欧美性猛交丰臀xxxxx网站| 国产精品日韩在线| 亚洲а∨天堂久久精品喷水| 国产成人精品免高潮在线观看| 久久久久久久一| 中文字幕亚洲欧美日韩在线不卡| 欧美在线播放视频| 久久这里只有精品视频首页| 国产日本欧美一区二区三区在线| 日韩精品中文字幕久久臀| 亚洲午夜精品久久久久久久久久久久| 欧美多人乱p欧美4p久久| 97涩涩爰在线观看亚洲| 欧美午夜久久久| 午夜精品一区二区三区av| 久久躁狠狠躁夜夜爽| 538国产精品一区二区免费视频| 亚洲欧洲日本专区| 奇米四色中文综合久久| 97久久精品国产| 国产精品久久久av| 欧美第一黄网免费网站| 91精品国产九九九久久久亚洲| 日韩电视剧免费观看网站| 日韩美女在线看| 国产热re99久久6国产精品| 欧洲精品在线视频| 欧美激情一区二区三区在线视频观看| 亚洲久久久久久久久久久| 久久亚洲一区二区三区四区五区高| 国产在线视频91| 亚洲国产天堂网精品网站| 欧美成人激情在线| 欧美性视频网站| 亚洲精品www久久久| 成人福利视频网| 久久中文字幕在线| 亚洲激情视频在线播放| 日韩精品免费在线| 国产精品久久久久久久久久东京| 国产成人精品在线视频| 久久九九全国免费精品观看| 国内精品视频一区| 黄色精品在线看| 青青草国产精品一区二区| 久久的精品视频| 亚洲第一精品福利| 亚洲最大的免费| x99av成人免费| 成人激情在线观看| 这里精品视频免费| 亚洲精品一区二三区不卡| 精品亚洲国产视频| 欧美激情一二区| 欧美巨乳美女视频| 97免费视频在线| 国产精品专区一| 97人人爽人人喊人人模波多| 亚洲精品美女视频| 亚洲国产成人精品电影| 久久成人综合视频| 在线视频欧美日韩精品| 欧美中文在线字幕| 青青久久av北条麻妃黑人| 精品国产欧美一区二区五十路| 亚洲国产精品大全| 日韩一区二区久久久| 91亚洲精品一区二区| 欧美日韩色婷婷| 亚洲精品美女在线| 伊人男人综合视频网| 中文字幕日韩精品有码视频| 8050国产精品久久久久久| 亚洲精品久久久久久久久| 亚洲人av在线影院| 久久精品国产电影| 美女国内精品自产拍在线播放| 国产精品2018| 国产精品jvid在线观看蜜臀| 久久久久久久久久av| 国产精品极品尤物在线观看| 久久影视电视剧免费网站清宫辞电视| 奇米一区二区三区四区久久| 2019亚洲日韩新视频| 欧美性猛交丰臀xxxxx网站| 亚洲综合在线中文字幕| 亚洲成av人片在线观看香蕉| 国产精品爽爽爽爽爽爽在线观看| 成人在线激情视频| 蜜臀久久99精品久久久久久宅男| 欧美黑人又粗大| 国外视频精品毛片| 日韩人在线观看| 国产精品极品美女粉嫩高清在线| 亚洲天堂av女优| 岛国av一区二区| 久久久久久成人| 久久久免费观看| 色无极影院亚洲| 中文字幕在线看视频国产欧美在线看完整| 欧美在线视频在线播放完整版免费观看| 欧美精品手机在线| 欧美人与性动交a欧美精品| 在线国产精品播放| 欧美大片在线看免费观看| 97超级碰在线看视频免费在线看| 福利二区91精品bt7086| 97激碰免费视频| 国产精品国产三级国产专播精品人| 久99九色视频在线观看| 国产网站欧美日韩免费精品在线观看| 亚洲成人性视频| 亚洲精品一区av在线播放|