国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Spring聲明式事務(wù)和@Aspect的攔截順序問(wèn)題的解決

Spring聲明式事務(wù)和@Aspect的攔截順序問(wèn)題的解決

2021-04-25 13:11Matchstick Java教程

本篇文章主要介紹了Spring聲明式事務(wù)和@Aspect的攔截順序問(wèn)題的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在使用abstractroutingdatasource配置多數(shù)據(jù)源時(shí),發(fā)現(xiàn)使用@aspect配置的datasourceswitchaspect總是在聲明式事務(wù)之后執(zhí)行,配置了order依然不行,經(jīng)過(guò)調(diào)研發(fā)現(xiàn)是由于兩者的aop代理方式不一致導(dǎo)致。

在spring內(nèi)部,是通過(guò)beanpostprocessor(《spring 攻略》一書(shū)中翻譯為,后處理器)來(lái)完成自動(dòng)創(chuàng)建代理工作的。根據(jù)匹配規(guī)則的不同大致分為三種類別: 1、匹配bean的名稱自動(dòng)創(chuàng)建匹配到的bean的代理,實(shí)現(xiàn)類beannameautoproxycreator 2、根據(jù)bean中的aspectj注解自動(dòng)創(chuàng)建代理,實(shí)現(xiàn)類annotationawareaspectjautoproxycreator 3、根據(jù)advisor的匹配機(jī)制自動(dòng)創(chuàng)建代理,會(huì)對(duì)容器中所有的advisor進(jìn)行掃描,自動(dòng)將這些切面應(yīng)用到匹配的bean中,實(shí)現(xiàn)類defaultadvisorautoproxycreator

其中@aspect聲明的aop是通過(guò)annotationawareaspectjautoproxycreator進(jìn)行代理的,而項(xiàng)目中的聲明式事務(wù)是beannameautoproxycreator方式進(jìn)行代理的,經(jīng)調(diào)試發(fā)現(xiàn)beannameautoproxycreator攔截優(yōu)先級(jí)高于annotationawareaspectjautoproxycreator,order配置只對(duì)同一類型的aop攔截方式起作用,如下:

datasourceswitchaspect

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 數(shù)據(jù)源切換切面
 * @author matchstick
 */
@aspect
@order(1) //確保該切面在transaction之前執(zhí)行
@component
public 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

?
1
2
3
4
5
6
7
8
9
10
@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,要么修改事務(wù)aop方式為annotationawareaspectjautoproxycreator,由于是通過(guò)注解實(shí)現(xiàn)的數(shù)據(jù)源切換aop,所以選擇了后者解決方案,如下:

datasourceconfig

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@bean
 public annotationawareaspectjautoproxycreator txproxy()
 {
 /*
  * 必須使用aspectj方式的autoproxy,這樣才能和datasourceswitchaspect保持統(tǒng)一的aop攔截方式,否則不同的攔截方式會(huì)導(dǎo)致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;
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://my.oschina.net/u/2333620/blog/1805869

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国内精品视频 | 亚洲精品一区二三区不卡 | 亚洲精品永久免费 | 国产成人综合在线观看 | 欧美精品福利视频 | 一级片免费在线观看视频 | 精品欧美一区二区三区久久久 | 欧美一区二区在线视频 | 永久av | 精品视频久久 | 一级欧美日韩 | 有码一区| 色www精品视频在线观看 | 日韩成人一区二区 | 在线日韩一区二区 | 久久精品网| 欧美a网| 麻豆精品国产91久久久久久 | 国产精品毛片久久久久久久 | 久久综合久久综合久久综合 | 久久国产欧美日韩精品 | 久久精品久久久 | 中文二区| 日夜夜精品视频 | 国产专区一区 | 欧美日韩国产一区二区三区 | 亚洲福利一区 | 日韩综合网| 四虎影视免费看电影 | 精品国产鲁一鲁一区二区在线观看 | 欧美成人免费在线视频 | 久久久网页 | 国产一区二区在线免费 | www操com | 成人一区二区三区在线观看 | 在线激情视频 | 日韩av色 | 操批网站 | 国内精品久久久久久久影视简单 | 天天干狠狠操 | 久久激情久久 |