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