Spring之AOP

AOP的概念
1:理解AOP是什麼
    * AOP Aspect-oriented programming   面向切面(方面)的編程
    * AOP的實現能夠對業務邏輯和系統級的服務進行隔離,使業務邏輯跟各系統服務之間的耦合度下降
        提升程序的重用性和開發效率。
      業務邏輯:某個類的某個方法要實現的功能
      系統級服務:系統日誌,事務 ,安全性驗證
 
2:怎麼實現AOP     
    * AOP實現的原理都是經過動態代理來實現的
    詳見:DynamicProxyTest.java
    注意:有兩種實現方式 jdk的動態代理和cglib動態代理
        jdk的動態代理機制只能代理實現了接口的類(基於接口編程)
        cglib的動態代理能夠代理沒有實現接口的類,也能夠代理實現了接口的類
 
3:AOP的一些專業術語       
  * 切面(Aspect) 就是交叉在各個業務邏輯中的系統服務 ,相似於 安全驗證,事務處理,日誌記錄
  * 織入(weaving) 就是講切面的實現插入到目標方法的過程
  * 鏈接點(JoinPoint) 就是理論上能夠被切面織入的方法 好比StudentServiceImpl類裏面的全部方法
  * 切入點(PointCut) 就是實際上被切面織入的方法  好比事務控制 add update del
  * 目標對象(target) 就是包含了被切面織入的方法  的類 ---StudentServiceImpl
  * 通知(Adivce) 就是切面的實現
  * 顧問(Advisor) 其實就是通知的一個封裝和延伸 能夠將通知以更復雜的方式織入到某些方法中
 
4:  spring的AOP實現
    4.1 引入兩個jar包
        *  spring-aop-4.2.1.RELEASE.jar
        * aopalliance-1.0.jar
 
    4.2 各類通知(前置通知,後置通知,環繞通知,異常通知) 的代碼
MethodBeforeAdvice    spring前置通知須要實現的接口 
AfterReturningAdvice   spring後置通知須要實現的接口 
MethodInterceptor      spring環繞通知須要實現的接口 

  

    4.3 配置通知 和應用通知
        * 配置目標對象類
        * 配置通知
        * 配置代理生成器
ProxyFactoryBean
 
    4.4 通知注意點   
        * 在代理類生成器的配置裏面 ,關於接口的屬性默承認以不用 <property name = "interfaces values">
        * 由於後置通知是在目標方法執行以後才執行,他能夠獲得目標方法的返回值,可是不能更改它的返回值
        * 環繞通知既有在目標方法執行前的代碼,也有在目標方法執行後的代碼,他不只能夠獲得目標方法的返回值
            並且能夠改變他
    詳見代碼:com.tz.springstudy.sysmanage.advice.*
            applicationContext.xml
            AdviceTest.java   
 
    4.5 顧問(advisor)    它將通知進行了包裝, 將切面織入到指定的某些方法當中   
        PointcutAdvisor是顧問的一種,它有兩種實現方式
        * 名稱匹配方法切入點顧問
            NameMatchMethodPointcutAdvisor
        * 正則表達式匹配方法切入點顧問
            RegexpMethodPointcutAdvisor
            a: *  匹配前面的表達式任意次  好比 ab* 能匹配ab abb abbb abbbbbb
            b: .  匹配任意單個字符 除了 "\r\n" 以外
            .* 表明任意字符串 
        詳見代碼:applicationContext.xml
                AdvisorTest.java   
 
    顧問解決了某些方法的問題,自動代理了生成器解決了某些類的問題
    咱們一直在努力將某些切面織入到某些類的某些方法裏面去           
相關文章
相關標籤/搜索