天天看點

Spring系列之AOP分析之擷取Advice的過程(四)

我們在前面的文章中分析了從切面類中擷取Advisor的過程,我們最後建立的Advisor執行個體為:InstantiationModelAwarePointcutAdvisorImpl,它是一個Advisor和PointcutAdvisor的實作類,是以我們可以從這個類中擷取Advice和Pointcut。從之前的分析中我們也看到了Pointcut的指派,在這一篇文章中我們将會具體分析Advice的建立過程。

我們在上一篇文章的末尾說到了這一段代碼可以執行個體化Advice。我們來看看這個方法的代碼:

ReflectiveAspectJAdvisorFactory中getAdvice方法的代碼如下

上面即是擷取Advice的過程。我們簡單的看一下calculateArgumentBindings這個方法做了什麼事:

calculateArgumentBindings

通過前面的分析我們可以了解到一個切面中的通知方法會生成一個Advisor執行個體(如InstantiationModelAwarePointcutAdvisorImpl,其實這個也是我們在SpringAOP中最常用的一個Advisor實作類),在生成這個Advisor執行個體的過程中會建立一個相應的Advice執行個體! 一個通知方法---->一個Advisor(包含Pointcut)------>一個Advice!

PS:這裡隻是一個生成Advice的地方,在其他的地方也會生成Advice,我們在以後再分析。