Spring aop概述-1

Spring aop概述

 

AopAspect-Oriented Programming(面向切面編程)的簡稱,Aspect是一種新的模塊機制,用來描述分散在對象、類或函數中的橫切關注點。從關注點中分離出橫切關注點是面向切面的程序設計的核心概念。分離關注點使解決特定問題的代碼從業務邏輯中獨立出來,業務邏輯中的代碼不再含有針對特定領域問題代碼的調用,業務邏輯同特定領域問題的關係通過切面來封裝、維護,這樣原本分散在整個應用程序中的變動就可以很好的管理起來。Spring AopIOC的使用提供了更多的便利,一方面,應用可以直接使用Aop的功能,設計應用的橫切關注點,把跨越應用程序多個模塊的功能抽象出來,並通過簡單的Aop的使用,靈活地編織到模塊中,比如可以通過Aop來實現應用程序中的日誌功能,另一方面,在Spring內部,一些支持模塊也是通過Spring Aop來實現的,如事務管理。接下以ProxyFactoryBean的實現爲例來了解Spring Aop的具體設計和實現。

 

1、設計原理

SpringAop模塊中,一個主要的部分是代理對象的生成,而對於Spring應用,可以看到,是通過配置和調用SpringProxyFactoryBean來完成這個任務的。在ProxyFactoryBean中,封裝了主要代理對象的生成過程。在這個生成過程中,可以使用JDKProxyCGLIB的兩種生成方式。

ProxyFactory爲設計爲中心,可以看到相關的類的繼承關係如下圖:

 

在這個類繼承體系中,可以看到完成Aop應用的類,比如AspectJProxyFactoryProxyFactoryBeanProxyFactory,它們都在同一個類的繼承體系下,都是ProxyConfigAdvisedSupportProxyCreatorSupport的子類。作爲共同基類,可以將ProxyConfig看出是一個數據基類,這個數據基類爲ProxyFactoryBean這樣的子類提供了配置屬性;在另一個基類AdvistedSupport的實現中,封裝了Aop對通知和通知器的相關操作,這些操作對於不同的Aop代理對象的生成都是一樣的,但是對於具體的Aop代理對象的創建,AdvistorSupport把它交給它的子類們去完成;對於ProxyCreatorSupport,可以將它看作是其子類創建Aop代理對象的一個輔助類。通過繼承以上提到的基類的功能的實現,具體的Aop代理對象的生成,根據不同的需要,分別由ProxyFactoryBeanAspectJProxyFactoryProxyFactory來完成。