image.png
攔截器可以配置将饺。Advice Advisor Interceptor
Advice :方法加強的類慎玖。MethodBeforeAdvice , AfterReturningAdvice
Advisor : Advisor中包括一個Advice蟆淀⌒稳耄可以多配置一個屬性mappedNames穴墅。用來表示加強哪些方法
Interceptor: 攔截器颤难。-
2.1 @PointCut 用來表示切面爽室,哪些類中的哪些方法需要加強汁讼。
2.2
@Before
@After 類似于finally。無論正常返回還是拋異常都會經過該方法阔墩。
@Aroud before+afterReturning
@AfterThrowing
@AfterReturning 加上returning="retVal"可以在方法中獲取返回值嘿架。
- AspectJ 和 spring的aop沒有直接關系。springAop只是引用了Aspect包中的注解啸箫,具體實現(xiàn)方式都在spring-aop中耸彪。但是AspectJ功能更強大。
4.所有的攔截之后的加強都是針對類來說的忘苛。spring中蝉娜,將beanFactory中的原來的類替換成代理類。
在spring啟動過程中扎唾,配置了@Aspect的類將會在spring中注冊一個BeanPostProcessor召川,這個類在初始化對象的時候,將對象進行加強胸遇。
5.具體的生成代理類通過jdk代理或cglib荧呐。當配置了<aop:config proxy-target-class="true">后,默認直接使用cglib代理。如果沒有該配置坛增,則在類增強的時候获雕,先判斷該類是否實現(xiàn)了自定義的接口,如果實現(xiàn)了自定義接口則通過 jdk方式代理收捣。若沒有届案,則使用 cglib 基于繼承的方式來代理。