講之前,先了解下aop中的幾個(gè)知識(shí)點(diǎn),
aop稱為面向切面編程,在程序開發(fā)主要用來解決一些系統(tǒng)層面上的問題,比如,日志、權(quán)限、事務(wù)等。
1.Aspect:切面,通常是一個(gè)類,里面可以定義切入點(diǎn)和通知
(2)JointPoint(連接點(diǎn)):程序執(zhí)行過程中明確的點(diǎn),一般是方法的調(diào)用
(3)Advice(通知):AOP在特定的切入點(diǎn)上執(zhí)行的增強(qiáng)處理,有before,after,afterReturning,afterThrowing,around
(4)Pointcut(切入點(diǎn)):就是帶有通知的連接點(diǎn),在程序中主要體現(xiàn)為書寫切入點(diǎn)表達(dá)式
(5)AOP代理:AOP框架創(chuàng)建的對(duì)象,代理就是目標(biāo)對(duì)象的加強(qiáng)。Spring中的AOP代理可以使JDK動(dòng)態(tài)代理,也可以是CGLIB代理,前者基于接口,后者基于子類
2.通知類型介紹
(1)Before:在目標(biāo)方法被調(diào)用之前做增強(qiáng)處理,@Before只需要指定切入點(diǎn)表達(dá)式即可
(2)AfterReturning:在目標(biāo)方法正常完成后做增強(qiáng),@AfterReturning除了指定切入點(diǎn)表達(dá)式后,還可以指定一個(gè)返回值形參名returning,代表目標(biāo)方法的返回值
(3)AfterThrowing:主要用來處理程序中未處理的異常,@AfterThrowing除了指定切入點(diǎn)表達(dá)式后,還可以指定一個(gè)throwing的返回值形參名,可以通過該形參名
來訪問目標(biāo)方法中所拋出的異常對(duì)象
(4)After:在目標(biāo)方法完成之后做增強(qiáng),無論目標(biāo)方法時(shí)候成功完成。@After可以指定一個(gè)切入點(diǎn)表達(dá)式
(5)Around:環(huán)繞通知,在目標(biāo)方法完成前后做增強(qiáng)處理,環(huán)繞通知是最重要的通知類型,像事務(wù),日志等都是環(huán)繞通知,注意編程中核心是一個(gè)ProceedingJoinPoint


