AOP稱為面向切面編程,一般用戶日志,事務(wù)、權(quán)限、多數(shù)據(jù)源切換,攔截器設(shè)計就是基于AOP的思想。Spring默認(rèn)使用JDK動態(tài)代理,在需要代理類而不是代理接口的時候,Spring會自動切換為使用CGLIB代理。
基本概念
- Aspect(切面):通常是一個類,里面可以定義切入點和通知
- JointPoint(連接點):程序執(zhí)行過程中明確的點,一般是方法的調(diào)用
- Advice(通知):AOP在特定的切入點上執(zhí)行的增強(qiáng)處理,有before,after,afterReturning,afterThrowing,around
-Pointcut(切入點):就是帶有通知的連接點,在程序中主要體現(xiàn)為書寫切入點表達(dá)式
-AOP代理:AOP框架創(chuàng)建的對象,代理就是目標(biāo)對象的加強(qiáng)。Spring中的AOP代理可以使JDK動態(tài)代理,也可以是CGLIB代理,前者基于接口,后者基于子類
注解方式
- @EnableAspectjAutoProxy, 開啟基于注解AOP模式
- @AsjectJ, 啟用AsjectJ支持
- @Pointcut,抽取公共的切入點
通知類型
- Before:在目標(biāo)方法被調(diào)用之前做增強(qiáng)處理,@Before只需要指定切入點表達(dá)式即可
- AfterReturning:在目標(biāo)方法正常完成后做增強(qiáng),@AfterReturning除了指定切入點表達(dá)式后,還可以指定一個返回值形參名returning,代表目標(biāo)方法的返回值
- AfterThrowing:主要用來處理程序中未處理的異常,@AfterThrowing除了指定切入點表達(dá)式后,還可以指定一個throwing的返回值形參名,可以通過該形參名
- After:在目標(biāo)方法完成之后做增強(qiáng),無論目標(biāo)方法時候成功完成。@After可以指定一個切入點表達(dá)式
- Around:環(huán)繞通知,在目標(biāo)方法完成前后做增強(qiáng)處理