不同的AOP框架會有其對AOP概念的不同實作方式,主要的差別在於所提供的Joinpoints、Aspects的豐富程度,以及它們如何被縫合(Weave)至應用程式之上(像是Pointcuts的定義方式)。
Spring的Advices是用Java程式語言來撰寫,而不使用特定的AOP語言,在定義Pointcuts時可以使用XML組態檔案,這兩者的撰寫 對於Java開發人員來說都很熟悉,您不必學習特定的語法,就可以用熟悉的Java程式語言與XML格式來運用Spring AOP。
Spring的AOP實作中會實作AOP Alliance(http://www.sourceforge.net/projects/aopalliance)所規範的介面,AOP Alliance是由許多團體所組成的聯合計畫(Joint project),這些團體對於AOP的實作要求必須遵合所制訂出來的介面規範,目的是對Java的AOP實作介面標準化,以增加AOP實作類別在不同的 Java應用程式之間的可移植性。
Spring的Advices是在執行時期導入至Targets,您可以讓Targets實作預先定義好的介面,則Spring在執行時期會使用 java.lang.reflect.Proxy來進行動態代理,如果不實作介面,則Spring會使用CGLIB為您的Targets產生一個子類別作 為代理類別(Proxy classes)。
在Spring AOP中,您應該以實作介面的方式為優先,這可以讓應用程式的元件彼此之間的耦合度降低,使用Proxy classes的方式,由於必須產生子類別,所以對於被宣告為final的方法無法進行代理,而且這個方式基本上是讓一些無法更動原始碼的第三方 (Third-party)類別或是遺產類別(Legacy classes)來使用。
Spring的只支援方法的Joinpoints,也就是Advices將在方法呼叫的前後被應用,Spring不支援Field成員的Jointpoints,這是因為在Spring的設計哲學中認為,支援Field成員的Joinpoints會破壞物件的封裝性。