[英]Some doubts related to the AOP configuration in Spring
我正在學習Spring Core認證,並且對Spring如何處理AOP有疑問。
閱讀文檔似乎可以理解存在兩種獲取Java AOP的方法:
使用AspectJ時 ,使用字節碼修改進行方面編織可提供一種成熟的面向方面的編程語言。 (因此在我看來, AspectJ是一種可以與Java集成以提供AOP功能的不同語言)。
Spring AOP :在Spring框架中使用,該框架使用動態代理進行方面編織,而不是字節碼修改。
所以我的懷疑主要是以下幾點:
1)閱讀文檔發現以下方法可以將AOP支持添加到我的Spring應用程序:
使用JAVA配置類:
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages=“com.example”)
public class AspectConfig {
...
}
使用XML配置:
<beans>
<aop:aspectj-autoproxy />
<context:component-scan base-package=“com.example” />
</beans>
正如您在兩種配置中看到的那樣,都有對AspectJ的引用:
@EnableAspectJAutoProxy
和
<aop:aspectj-autoproxy />
為什么? 如果Spring使用Spring AOP代替AspectJ,為什么在Spring中配置AOP時會引用AspectJ ?
2)在前面的示例中,顯示了配置Spring的2種方法:通過Java配置類和通過XML配置 。 我知道存在配置Spring應用程序的第三種方法:通過使用批注 。 因此, 存在使用批注配置AOP的方法嗎?
我認為這些Spring AOP設置中名稱中涉及到AspectJ的內容確實令人煩惱,沒有幫助。 我能理解你為什么感到困惑。 Spring AOP實際上是與AspectJ不同的概念。 如您所說:在AspectJ的編譯或加載期間,Spring AOP中的動態JDK或CGLIB代理與字節代碼檢測相對。 其他區別是:
call()
, set()
, get()
等,您還有更多選擇,可以通過建議或內部類型定義來攔截連接點並將跨切面的關注點應用於代碼庫。 我不明白您的問題2。 您的示例中的配置類確實使用了注釋,因此沒有第三種方法。 ;-)但是在Spring中有一種古老的,確實過時的AOP方法,稱為攔截器。 盡管它仍然可以使用,但它是早期AOP方法的遺留物,如今已經過時了。
Spring AOP和AspectJ都可以通過XML或Spring中的注釋進行配置。 :-)
不知道我是否完全理解您的問題,我想您是在問:“如果使用Spring AOP,為什么會看到對AspectJ的引用?”
如果是這樣,您應該知道Spring不會與AspectJ 競爭 ,而是可以將 AspectJ用於AOP。
請參閱Spring文檔: http : //docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.