🌈鍵盤敲爛,年薪30萬🌈
目錄
一、AOP相關概念
① AOP核心思想思想:
② AOP專業術語:
二、AOP快速如入門
三、AOP工作流程
四、切入點表達式
① 語法格式
②支持通配符
③書寫技巧
五、通知類型
①?環繞通知?
六、獲取切入點參數
一、AOP相關概念
① AOP核心思想思想:
- 無侵入式的功能增強
② AOP專業術語:
- 連接點:原始方法
- 切入點表達式:匹配連接點的式子(要追加功能的方法)
- 通知:追加的功能
- 切面:綁定通知和切入點
二、AOP快速如入門
AOP入門案例(基于注解 )
分析:
1.導入依賴坐標
2.制作連接點(數據層的方法)
3.定義切入點表達式
4.綁定切入點與通知關系(切面)
定義通知類:
@Component
@Aspect
public class MyAdvice {// 定義切入點表達式@Pointcut("execution(void itpan.dao.impl.BookDaoImpl.update())")public void pt(){}// 定義通知和綁定關系@Before("pt()")public void method(){System.out.println(System.currentTimeMillis());}}
加入支持AOP的注解
@Configuration
@ComponentScan("itpan")
@EnableAspectJAutoProxy // 告訴spring 程序有基于注解開發的AOP
public class SpringConfig {
}
三、AOP工作流程
四、切入點表達式
① 語法格式
- 標準格式:動作關鍵字(訪問修飾符 返回值 包名.類名或接口名.方法名(參數) 異常名)
- 例如:execution(public User com.itpan.service.BookService.findById(int))
②支持通配符
..??? 任意
*???? 任意一個
③書寫技巧
- 權限修飾符一般為public 可省略 private不要省略
- 包名書寫盡量不要使用.. 常用*或精準匹配
- 接口名/類名等通用名稱使用*匹配 例如UserService 使用*Service
- 方法名動詞精準匹配,名詞*匹配 例如getById 使用getBy*
五、通知類型
①?環繞通知?
注意:
返回值類型為Object
?補充:
前置通知 @Before
后置通知 @After
運行成功后通知 @AfterReturning
拋出異常后通知 @AfterThrowing
六、獲取切入點參數
環繞通知:ProceedingJoinPoing中getArgs()
其他通知:JoinPoint中getArgs()方法
注意:ProceedingJoinPoing與JoinPoint必須式方法中的第一個參數