Spring2.0升級(jí)Spring2.0.7的變化
Spring2.0的aop果然很大改動(dòng)。aop文檔開(kāi)篇就介紹@Aspect注解方式的配置,其實(shí)我覺(jué)得統(tǒng)一aop的配置方式,并且使得它更加易用才是這次改動(dòng)的成功之處。
初看schema的配置方式就覺(jué)得Spring2.0應(yīng)該是用AutoProxyCreator來(lái)實(shí)現(xiàn)的。經(jīng)過(guò)調(diào)看src,發(fā)現(xiàn)果然如此;同時(shí)關(guān)注了下order的實(shí)現(xiàn),期望新引入的aspect和原來(lái)的advisor能并行。
(理論應(yīng)該如此,可實(shí)際上Spring2.0發(fā)布的時(shí)候aspect并沒(méi)有實(shí)現(xiàn)order,然后我的myeclipse的xml編輯器好像用了最新的 aop schema,導(dǎo)致我寫xml的時(shí)候是可以寫order,我還暗喜,然后運(yùn)行就出錯(cuò)了~~;然后去了Spring官網(wǎng),看看是不是schema的問(wèn)題;看了Spring2.0.7的changelog后發(fā)現(xiàn)這個(gè)特性才加上~~~bug?。?!不管怎么說(shuō),現(xiàn)在是好了,所以切記,整數(shù)的release版本是很危險(xiǎn)的)Spring2.0.7以后修復(fù)/添加了order屬性,使得aspect和advisor都能很好的并存,對(duì)Spring來(lái)說(shuō)都是 advisor/advice 拉 ^_^ 。
看了Spring2.0.7后發(fā)現(xiàn)aop那塊的代碼在Spring2.0到Spring2.0.7中大改了,有一個(gè)原來(lái)用來(lái)加載aop config的類都沒(méi)有了(或者是改名了)~~?,F(xiàn)在的aop實(shí)現(xiàn)基本上是這樣:
AspectJAwareAdvisorAutoProxyCreator 作為啟用的默認(rèn)AutoProxyCreator(如果你使用了的話AutoProxyCreator會(huì)換成 AnnotationAwareAspectJAutoProxyCreator)不過(guò)其實(shí)只是添加了搜索bean中標(biāo)記了@Aspect的實(shí)例作為可用的advisor而已;order的排序方式好像也有改動(dòng),現(xiàn)在的排序沒(méi)有什么問(wèn)題。
性能上,由于采用了單一的AspectJAwareAdvisorAutoProxyCreator ,作為唯一的advisor配置庫(kù),在其中進(jìn)行advisor的排序,所以再多的切面也只需要實(shí)例化一個(gè)bean的對(duì)象,切面在一個(gè)層次上進(jìn)行,看似沒(méi)有以前那么臃腫拉 :)
Spring2.0的aop配置比較集中,很清晰,也很簡(jiǎn)單。
【編輯推薦】