SPRing Framework中的面向方面編程一
在本系列的第一部分,我介紹了如何實現面向方面領域的“HelloWorld”:跟蹤和記錄方面。利用Spring框架所提供的面向方面編程(aspect-Oriented Programming,AOP)功能,您看到了如何使用before-、after-和基于異常的通知,以及如何使用基于正則表達式的簡單切入點。跟蹤和記錄方面提供了非常不錯的上手例子,而本文將進一步介紹一種新的通知形式:around通知。
比起第一部分中介紹的那些通知類型,around形式的通知是一種更具侵入性也更強大的面向對象概念。本文將描述around通知的每個特性,以便您可以在自己的Spring AOP應用程序中正確地使用它。在本文最后,我將向您展示如何使用around通知來截獲和改變應用程序中各個特性相互作用的方式,以便實現CUCkoo's Egg(杜鵑的蛋)面向方面設計模式。
概述Spring AOP、IoC和代理
在第一部分,我們快速瀏覽了Spring的一些AOP特性,而沒有闡明Spring如何實現AOP的細節。要理解Spring框架如何運轉,尤其是它如何實現其AOP功能,首先您要明白,Spring是一個依靠于控制反轉(Inversion of Control,IoC)設計模式的輕量級框架。
注重:本文的目的不是要深入介紹IoC模式,介紹IoC只是為了使您明白該設計模式是如何影響Spring AOP實現的。有關IoC模式的更具體的介紹請參見本文末尾的參考資料。
IoC設計模式的出現已經有一段時間了。一個最明顯的例子就是J2EE架構本身。隨著企業開發尤其是J2EE平臺的出現,應用程序開始依靠于由外部容器所提供的一些特性,比如bean創建、持久性、消息傳遞、會話以及事務治理。
IoC引入了一個新概念:由組件構成的框架,它與J2EE容器有許多類似之處。IoC框架分離了組件所依靠的功能,并且,根據Sam Newman文章中的說法,提供了“連接組件的‘膠水’”。
對組件所依靠特性的控制 被反轉 了,這樣外部框架就可以盡可能透明地提供這些特性了。IoC模式真正意識到了從傳統的由依靠于功能的組件來負責這些功能,到由獨立的框架來配置和提供這些功能的方式轉變。
圖1顯示了一些構成IoC模式的不同組件角色的例子。
圖1. 沒有對BusinessLogic bean應用方面時的順序圖.
圖字:
Component:組件
Provides Facilities:提供功能
Relies on and conforms to:依靠于并服從
Manages the services the framework can then use to provide facilities:治理框架隨后可以用來提供功能的服務
Service:服務
Your Component:您的組件
IoC Framework:IoC框架
External services:外部服務
IoC模式使用3種不同的方法來解除組件與服務控制的耦合:類型1、類型2和類型3。
IoC在組件開發和企業開發中越來越受歡迎。IoC的實際例子包括傳統的J2EE解決方案,比如:JBoss、Apache基金會的Avalon項目以及本文的Spring框架。實際上,Spring框架構建于IoC模式的基礎上是為了幫助將它的輕量級功能注入到它的相關應用程序的組件中。
那么IoC對于Spring AOP有何意義呢?Spring的IoC特性是使用IoC springconfig.xml配置文件對應用程序應用方面的推動因素之一。springconfig.xml配置文件通知Spring框架運行時有關應用程序的組件要被注入的功能類型的信息,所以自然輕量級的AOP功能就以同樣的方式應用了。然后Spring使用代理模式圍繞現有的類和bean實現指定的AOP功能。
圖2顯示了Spring及其IoC框架如何使用代理對象提供AOP功能(根據springconfig.xml文件中的IoC配置。)
圖2. springconfig.xml配置文件改變了Spring框架IoC,以便隨后向第一部分中的一個順序圖提供AOP代理(單擊圖像查看大圖)
新聞熱點
疑難解答