引言
Spring aop支持@AspectJ注解的方式來(lái)配置切面,相比于手動(dòng)配置xml且手動(dòng)實(shí)現(xiàn)增強(qiáng)、切點(diǎn)的方式要方便很多。一般的配置流程如下:
1.配置xml
在Spring的xml配置文件里引入aop chema:
xmlns:aop="http://www.springframework.org/schema/aop"
<beans>里加上"<aop:aspectj-autoproxy>"
之后Spring容器會(huì)自動(dòng)為那些加了@Aspect注解的component創(chuàng)建代理,織入切面。事實(shí)上,Spring內(nèi)部依舊使用AnnotationAwareAspectJAutoProxyCreator完成了這部分工作,只是隱藏起來(lái)了。
如果需要使用CGlib針對(duì)類生成代理(jdk原生的代理只支持接口),在上述的配置項(xiàng)中增加屬性:
proxy-target-class = true即可。
2.新建相應(yīng)的切面類
只要加上@Component和@Aspect 注解,Spring容器會(huì)自動(dòng)找到
3.切點(diǎn)邏輯
在方法上加@Pointcut 注解,可識(shí)別成切點(diǎn),訪問(wèn)控制符(private、public protected)相應(yīng)的表示切點(diǎn)可以被引用到的范圍。
@Pointcut注解的value是AspectJ的切點(diǎn)語(yǔ)法,Spring支持大部分AspectJ語(yǔ)法。
4.增強(qiáng)邏輯
比較常用的有:@Before前置增強(qiáng),@AfterReturning后置增強(qiáng),@Around環(huán)繞增強(qiáng),@AfterThrowing異常增強(qiáng),@DeclareParants引介增強(qiáng),@After final增強(qiáng)。
通過(guò)JoinPoint可以獲取到連接點(diǎn)的相應(yīng)信息。