對Spring的AOP體系的一些個人想法

recher發表於2004-11-08
(1)首先spring 的aop體系相容了spring 的javabeans的配置和IOC的配置體系形成了比較風格統一,正因為spring作者Rod Johnson是aopalliance定製人之一,理所當然的spring也支援和遵守aopalliance的規範。從他的核心看來並不複雜就是透過Cglib和JDK動態代理這兩種方式實現的,預設是Cglib的方式.
(2)Spring的AOP體系實現的重擴充套件和開放的角度看是比較完美的,但是我個人覺得(不知道對不對的,大家就看看的心態好了,自己鑑別好了),使用的複雜性和AOP的開關原則又存在一些弊端(哈哈有點自大了,竟然攻擊Johnson):AOP是從更廣的抽象正交分離關注點,但是使用Spring的AOP體系方式並沒有使織入者與被織入者的關係分離(因為你還是必須寫一個的類實現MethodInterceptor,把兩者的織入關係程式碼裡寫)這就必須讓使用者的AOP觀念很強才能正常使用,初學者很難去理解.
(3)我自己認為,可以簡單的使用配置宣告織入者,被織入者和織入點(織入方式:befor/after),和織入的方法函式和被織入的方法函式,那麼後臺就能透過一個工廠直接形成一個Advisor(完全扮演了一個橫切觀念,包括被織入的程式碼片斷和織入點----代理顧問)再根據其完全可以實現一些AOP的操作,而不需要再手工去處理那麼多邏輯。不可否認這樣的開關決策必然會降低開放性和使用者的參與和改造能力,但是還是有機會可以補償的:可以開放一個核心的實現例如Cglib2AopProxy.java和JdkDynamicAopProxy給一些有志改造或需要的人員進行繼承派生就行了。畢竟AOP的核心觀念就是織入者,被織入者,織入點和織入的條件。織入的情況大多就是之前,之後,還有就是一段程式碼中(同時有之前之後).根本就可以創造一個AOP體系完成織入的使用者定義的邏輯。
(4)說了一些個人覺得說缺點的地方,我也覺得有一些偏激了,我是多麼的尊敬Rod Johnson的畢竟他是我們這些人的前輩同時很無私的提供很多優秀的觀念給我們,是時候也要說一說Spring AOP中很好的地方,第一他把AOP的過程分的更細了(我並沒有很詳細的看的程式碼體系,只是從介面的編排和一些比較核心程式碼理解的),在每一個環節中很好的分離面出來。提供了很多最佳化服務:例如Cache,區分單例項,和非單例項實現;同時也提出支援配置過濾函式名的織入方法,也提供了不少虛類,給使用者去改造(但是框架改造的難度比較大,還不如自己寫了)
(5)我自己正著手寫包含一個簡單AOP體系的開源專案,如果大家有什麼不同的看法或覺得我說的不對的地方請指出來,小弟十分的感謝.

相關文章