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
顧問解決了某些方法的問題,自動代理了生成器解決了某些類的問題
咱們一直在努力將某些切面織入到某些類的某些方法裏面去