Spring AOP

AOP簡介:

AOP (Aspect Oriented Programming):面向切面程序,通過預編譯方式和運行動態代理實現程序功能的統一維護的一種技術
主要功能:日誌記錄,性能統計,安全控制,事務處理,異常處理等等

AOP的實現方式:

  • 預編譯:AspectJ
  • 運行期動態代理(JDK動態代理、CGLib動態代理):SpringAOP、JbossAOP

       

       

Spring框架中AOP的用途:

  • 提供了聲明式的企業服務,特別是EJB的替代服務的聲明
  • 允許用戶定製自己的方面,已完成OOP與AOP的互補使用
  • AOP面向對象      OOP各個方面橫切

Spring的AOP實現:

  • 純java實現,無需特殊的編譯過程,不需要控制類加載器層次
  • 目前只致辭方法執行連接點(通知Spring Bean的方法執行)
  • 不是爲了提供最完整的AOP實現,而是側重於提供一種AOP實現和Spring IOC容器之間的整合,用於幫助解決企業應用中的常見問題
  • Spring AOP不會與AspectJ競爭,從而提供綜合全面的AOP解決方法

有接口和無接口的Spring AOP實現區別:

  • Spring AOP默認使用標準的JavaSE動態代理作爲AOP代理,這使得任何接口(或者接口集)都可以被代理
  • Spring AOP中也可以使用CGLIB代理(如果一個業務對象並沒有實現一個接口)

       

切點:

       

ProxyFactoryBean:

  • 創建Spring AOP代理的基本方法是使用org.springframework.org.framework.ProxyFactoryBean
  • 這惡意完全控制切入點和通知(advice)以及他們的順序
  • 使用ProxyFactoryBean或者其他IOC相關類來創建AOP代理的最重要好出是通知和切入點也可以由IOC來管理
  • 被代理類沒有實現任何接口,使用CGLIB代理,否則JDK代理
  • 通過設置ProxyTargetClass爲true,可強制使用CGLIB
  • 如果目標類實現了一個(或者多個)接口,那麼創建代理的類型將依賴ProxyFactoryBean的配置
  • 如果ProxyFactoryBean和ProxyInterfaces屬性被設置爲一個或多個全限定接口名,基於JDK的代理將被創建
  • 如果ProxyFactoryBean的ProxyFactoryfaces屬性沒有被設置,但是目標類實現了一個(或者更多)接口,那麼ProxyFactoryBean將自動檢測到這個目標類已經實現了至少一個接口,創建一個基於JDK的代理 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章