javascript
Spring 2.x AOP 配置方式整理
來(lái)源:http://www.javaeye.com/topic/320553
?
spring官方手冊(cè)給出的配置實(shí)例。
--------------------------------------------------------------------------------
?
讓我們假定你所有的服務(wù)層類定義在以?'x.y.service'?為根的包內(nèi)。 為了讓service包(或子包)下所有名字以?'Service'?結(jié)尾的類的對(duì)象擁有默認(rèn)的事務(wù)語(yǔ)義,你可以做如下的配置:
Xml代碼?下面的配置示例演示了兩個(gè)擁有完全不同的事務(wù)配置的bean。
Xml代碼?在service接口所有的方法上執(zhí)行的一個(gè)業(yè)務(wù)service方法。這里的定義假設(shè)所有的接口都被
放置在service包內(nèi),它們的實(shí)現(xiàn)被放置在service包的子包內(nèi)。
如果你按照功能對(duì)接口進(jìn)行分組(例如:包c(diǎn)om.xyz.someapp.abc.service,com.xyz.def.service),
則這種情況下這個(gè)切點(diǎn)表達(dá)式應(yīng)該是:"execution(* com.xyz.someapp..service.*.*(..))"
?
在dao接口上定義的所有方法內(nèi)執(zhí)行一個(gè)數(shù)據(jù)訪問(wèn)操作。這個(gè)定義假設(shè)所有的dao接口定義
在dao包內(nèi),實(shí)現(xiàn)被放置在了子包內(nèi)。
?
任何一個(gè)名字以“set”開(kāi)始的方法的執(zhí)行:
Xml代碼??
AccountService?接口定義的任意方法的執(zhí)行:
Xml代碼??
在service包中定義的任意方法的執(zhí)行:
Xml代碼??
在service包或其子包中定義的任意方法的執(zhí)行:
Xml代碼??
?
其他的例子:?
--------------------------------------------------------------------------------?
兩個(gè)數(shù)據(jù)源,兩個(gè)數(shù)據(jù)庫(kù)事務(wù)攔截器,兩個(gè)數(shù)據(jù)庫(kù)事物切點(diǎn)。
execution組合表達(dá)式表述數(shù)據(jù)庫(kù)事務(wù)切點(diǎn):
大部分service類的方法使用數(shù)據(jù)源txManager-datasourceone,對(duì)應(yīng)事物切點(diǎn)txPointcut-datasourceone,事物攔截器txAdvice-datasourceone;
service層PublishService類的幾個(gè)方法使用數(shù)據(jù)源txManager-datasourcetwo,對(duì)應(yīng)事物切點(diǎn)txPointcut-datasourcetwo,事物攔截器txAdvice-datasourcetwo;
一個(gè)自定義方法攔截器RuntimeLogInterceptor(攔截每個(gè)方法,并記錄每個(gè)方法的執(zhí)行日志),攔截切點(diǎn)runtimeLogInterceptorPoint;
總結(jié)一下:?
--------------------------------------------------------------------------------
?
1,pointcut既可以定義在一個(gè)接口上面(表示實(shí)現(xiàn)該接口的類方法將被攔截),同時(shí)也可以定義在一個(gè)類上面(無(wú)接口的情
?? 況,需要強(qiáng)制使用cglib)。在接口上面定義pointcut時(shí)無(wú)需關(guān)心接口實(shí)現(xiàn)類的具體位置,只需要定義被攔截的接口及方
?? 法位置。
2,常見(jiàn)的情況:
x.y.service..*Service.*(..)
x.y.service —— 包“x.y.service”
x.y.service.. —— 包“x.y.service”及其子包例如:“x.y.service.abc”,“x.y.service.def”,“x.y.service.ghi”,“x.y.service.jkl”。。。
*Service —— 定義接口(或沒(méi)有實(shí)現(xiàn)接口的類,需要使用cglib代理)表達(dá)式;所有以Service結(jié)尾的類或接口,注意不是所有以Service結(jié)尾的包名。
*(..) —— 定義方法名,方法參數(shù)表達(dá)式;任意方法的名稱,任意方法參數(shù)。
com.xyz.service.*.*(..)
com.xyz.service —— 包“com.xyz.service”
*.*(..) —— 任意接口(或沒(méi)有實(shí)現(xiàn)接口的類,需要使用cglib代理),任意方法,任意參數(shù)
在service包下定義的任意方法的執(zhí)行。
com.xyz.service..*.*(..)
com.xyz.service —— 包“com.xyz.service”
com.xyz.service.. ——包“com.xyz.service”及其子包
*.*(..) —— 任意接口(或沒(méi)有實(shí)現(xiàn)接口的類,需要使用cglib代理),任意方法,任意參數(shù)
總結(jié)
以上是生活随笔為你收集整理的Spring 2.x AOP 配置方式整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RTX 30清仓大甩卖!价格全线暴跌 最
- 下一篇: JavaScript判断浏览器类型及版本