AOP
面向切面編程,預編譯方式和運行時動態代理實現在不修改源碼情況下給程序動態統一添加功能
代理模式
,建立在spring抽象事務管理之上的聲明性事務管理- 支持用戶自定義的切面
- 業務邏輯分離,低耦合
核心:橫切關注點的分離和織入
場景:日志記錄,性能統計,安全控制,事務處理
其他幾個重要概念
- 切面
- 切入點
- 切點表達式
Aspect
通過一個 簡單示例 引入對Aspect的學習
環繞通知=前置通知+目標方法執行proceed()+后置通知
PointCut
- @within和@target:類注解
- @annotation:方法注解
- execution():
execution( modifier-pattern?/*修飾符*/ ret-type-pattern/*返回類型*/ declaring-type-pattern?/*方法模式*/ name-pattern(param-pattern)/*參數模式*/ throws-pattern?/*異常模式*/ )
/*1、第一個*號:表示返回類型,*號表示所有
2、包名:表示需要攔截的包名,后面..表示當前包和當前包的所有子包: impl包、子孫包下所有類的方法
3、第二個*號:表示類名,*號表示所有
4、*(..):最后這個星號表示方法名,*號表示所有,括弧里面表示方法參數,..表示任何參數 */
@pointcut("execution(* com.sample.service.impl..*.*(..))")
JoinPoint
Object[] getArgs //返回目標方法的參數
Signature getSignature //返回目標方法的簽名
Object getTarget //返回被織入增強處理的目標對象
Object getThis //返回AOP框架為目標對象生成的代理對象