在spring中, ReflectiveAspectJAdvisorFactory用于解析通过@Aspect注册的切面,在ReflectiveAspectJAdvisorFactory#getAdvisors生成advisor时,有一个这样的步骤:
在设置了延迟初始化时,会在所有advisors前增加一个前置通知来实例化切面Aspect,使得后续的通知可以直接使用该实例调用各自的通知方法。但是我有个疑惑点,在通知里,每次调用方法时,都会通过aspectInstanceFactory重新获取一次,在AbstractAspectJAdvice#invokeAdviceMethodWithGivenArgs调用通知方法时代码如下:
这个里面已经采用双重检查锁定确保只实例化一次(LazySingletonAspectInstanceFactoryDecorator#getAspectInstance):
在这种情况下,如果不加SyntheticInstantiationAdvisor这个前置通知来实例化切面,而由具体通知执行时再通过工厂实例化是否可行?spring这样设计的用意在哪?