Spring AOP原理解析——基于自动代理AOP是如何实现的?
在上一篇(https://blog.csdn.net/u011983531/article/details/80359304)我们介绍了基于经典代理的AOP实现方案,在这一篇中,我们将看看基于自动代理的AOP是如何实现的。
//基于自动代理AOP
<bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper"></bean>
<bean id="sleepAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="sleepHelper"/>
<property name="pattern" value=".*sleep"/>
</bean>
<bean id="human" class="test.spring.aop.bean.Human"></bean>
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
基于自动代理的AOP是使用DefaultAdvisorAutoProxyCreator来实现的。
首先来看看DefaultAdvisorAutoProxyCreator的层次结构。
DefaultAdvisorAutoProxyCreator实现了BeanPostProcessor接口,我们知道BeanPostProcessor接口实在Bean初始化前后执行一些逻辑,而为对象自动创建代理就是在后置处理中实现的。
整个实现过程可以分为下面几步:
1、读取配置文件,生成对应的BeanDefinition
2、调用ClassPathXmlApplicationContext的refresh()方法,refresh()方法会执行下面几步。
(1)实例化所有的BeanPostProcessor对象,并调用BeanFactory的addBeanPostProcessor(…)方法添加到Spring容器中
(2)调用BeanFactory的preInstantiateSingletons()方法,预先生成所有的单例Bean
(3)在第二步生成单例Bean的过程中,在Bean实例化和初始化前后会调用BeanPostProcessor的前置和后置处理。
其中,AOP的代理是在AbstractAutoProxyCreator的postProcessAfterInitialization(…)方法中实现的,该方法主要做了下面三件事情:
1、获取所有的Advisor
2、遍历所有Advisor,判断当前对象是否需要被拦截
3、如果需要被拦截,调用ProxyFactory的getProxy(…)方法为当前对象创建代理
上一篇: 封装Vue组件库(三)、Storybook 可视化的展示组件的平台
下一篇: AOP
推荐阅读
-
Spring AOP原理解析——基于自动代理AOP是如何实现的?
-
Spring AOP(基于代理的实现)
-
Spring源码学习【六】AOP原理解析(一)代理对象的生成
-
Spring的AOP实现原理源码解析
-
深入分析 Spring 基于注解的 AOP 实现原理
-
【Spring AOP源码】基于JDK动态代理和Cglib创建代理对象的原理分析
-
spring5 源码深度解析----- Spring事务 是怎么通过AOP实现的?(100%理解Spring事务)
-
Spring Aop(十四)——Aop自动创建代理对象的原理
-
Spring Aop(十四)——Aop自动创建代理对象的原理
-
深入分析 Spring 基于注解的 AOP 实现原理