SPRing Framework中的面向方面編程一
在本系列的第一部分,我介紹了如何實(shí)現(xiàn)面向方面領(lǐng)域的“HelloWorld”:跟蹤和記錄方面。利用Spring框架所提供的面向方面編程(aspect-Oriented Programming,AOP)功能,您看到了如何使用before-、after-和基于異常的通知,以及如何使用基于正則表達(dá)式的簡(jiǎn)單切入點(diǎn)。跟蹤和記錄方面提供了非常不錯(cuò)的上手例子,而本文將進(jìn)一步介紹一種新的通知形式:around通知。
比起第一部分中介紹的那些通知類(lèi)型,around形式的通知是一種更具侵入性也更強(qiáng)大的面向?qū)ο蟾拍睢1疚膶⒚枋鯽round通知的每個(gè)特性,以便您可以在自己的Spring AOP應(yīng)用程序中正確地使用它。在本文最后,我將向您展示如何使用around通知來(lái)截獲和改變應(yīng)用程序中各個(gè)特性相互作用的方式,以便實(shí)現(xiàn)CUCkoo's Egg(杜鵑的蛋)面向方面設(shè)計(jì)模式。
概述Spring AOP、IoC和代理
在第一部分,我們快速瀏覽了Spring的一些AOP特性,而沒(méi)有闡明Spring如何實(shí)現(xiàn)AOP的細(xì)節(jié)。要理解Spring框架如何運(yùn)轉(zhuǎn),尤其是它如何實(shí)現(xiàn)其AOP功能,首先您要明白,Spring是一個(gè)依靠于控制反轉(zhuǎn)(Inversion of Control,IoC)設(shè)計(jì)模式的輕量級(jí)框架。
注重:本文的目的不是要深入介紹IoC模式,介紹IoC只是為了使您明白該設(shè)計(jì)模式是如何影響Spring AOP實(shí)現(xiàn)的。有關(guān)IoC模式的更具體的介紹請(qǐng)參見(jiàn)本文末尾的參考資料。
IoC設(shè)計(jì)模式的出現(xiàn)已經(jīng)有一段時(shí)間了。一個(gè)最明顯的例子就是J2EE架構(gòu)本身。隨著企業(yè)開(kāi)發(fā)尤其是J2EE平臺(tái)的出現(xiàn),應(yīng)用程序開(kāi)始依靠于由外部容器所提供的一些特性,比如bean創(chuàng)建、持久性、消息傳遞、會(huì)話(huà)以及事務(wù)治理。
IoC引入了一個(gè)新概念:由組件構(gòu)成的框架,它與J2EE容器有許多類(lèi)似之處。IoC框架分離了組件所依靠的功能,并且,根據(jù)Sam Newman文章中的說(shuō)法,提供了“連接組件的‘膠水’”。
對(duì)組件所依靠特性的控制 被反轉(zhuǎn) 了,這樣外部框架就可以盡可能透明地提供這些特性了。IoC模式真正意識(shí)到了從傳統(tǒng)的由依靠于功能的組件來(lái)負(fù)責(zé)這些功能,到由獨(dú)立的框架來(lái)配置和提供這些功能的方式轉(zhuǎn)變。
圖1顯示了一些構(gòu)成IoC模式的不同組件角色的例子。

圖1. 沒(méi)有對(duì)BusinessLogic bean應(yīng)用方面時(shí)的順序圖.
圖字:
Component:組件
Provides Facilities:提供功能
Relies on and conforms to:依靠于并服從
Manages the services the framework can then use to provide facilities:治理框架隨后可以用來(lái)提供功能的服務(wù)
Service:服務(wù)
Your Component:您的組件
IoC Framework:IoC框架
External services:外部服務(wù)
IoC模式使用3種不同的方法來(lái)解除組件與服務(wù)控制的耦合:類(lèi)型1、類(lèi)型2和類(lèi)型3。
IoC在組件開(kāi)發(fā)和企業(yè)開(kāi)發(fā)中越來(lái)越受歡迎。IoC的實(shí)際例子包括傳統(tǒng)的J2EE解決方案,比如:JBoss、Apache基金會(huì)的Avalon項(xiàng)目以及本文的Spring框架。實(shí)際上,Spring框架構(gòu)建于IoC模式的基礎(chǔ)上是為了幫助將它的輕量級(jí)功能注入到它的相關(guān)應(yīng)用程序的組件中。
那么IoC對(duì)于Spring AOP有何意義呢?Spring的IoC特性是使用IoC springconfig.xml配置文件對(duì)應(yīng)用程序應(yīng)用方面的推動(dòng)因素之一。springconfig.xml配置文件通知Spring框架運(yùn)行時(shí)有關(guān)應(yīng)用程序的組件要被注入的功能類(lèi)型的信息,所以自然輕量級(jí)的AOP功能就以同樣的方式應(yīng)用了。然后Spring使用代理模式圍繞現(xiàn)有的類(lèi)和bean實(shí)現(xiàn)指定的AOP功能。
圖2顯示了Spring及其IoC框架如何使用代理對(duì)象提供AOP功能(根據(jù)springconfig.xml文件中的IoC配置。)

圖2. springconfig.xml配置文件改變了Spring框架IoC,以便隨后向第一部分中的一個(gè)順序圖提供AOP代理(單擊圖像查看大圖)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注