在Spring的AOP模块中,一个主要部分是代理对象的生成。而对于Spring应用,可以看到是通过配置和调用Spring的ProxyFactoryBean来完成的。在ProxyFactoryBean中,又封装了主要代理对象的生成过程。而代理对象的生成,使用了JDK的Proxy和CGLIB两种方式。
1.AopProxy类结构体系
2.ProxyFactory类结构体系
3.ProxyFactoryBean
因为ProxxyFactoryBean是在Spring IOC环境中创建AOP应用的底层方法,也是最灵活的方法。所以我们以ProxyFactoryBean为入口,逐层深入,理解AOP实现
1.配置ProxyFactoryBean
<!--通知器,通知器的实现定义了需要对目标对象进行的增强的切面行为 -->
<bean id=”testAdvisor” class=”com.test.TestAdvisor” />
<!--AOP代理,封装AOP功能的主要类 -->
<bean id=”testAOP” class=”org.springframework.aop.ProxyFactoryBean”>
<!--AOP代理接口 -->
<property name=”proxyInterfaces”>
<value>com.test.TestProxyInterface</value>
</property>
<!--需要使用AOP切面增强的对象 -->
<property name=”target”>
<bean class=”com.test.TestTarget” />
</property>
<!--interceptorNames属性的值往往设置为需要定义的通知器 -->
<property name=”interceptorNames”>
<list>
<value>testAdvisor</value>
</list>
</property>
</bean>
2.AopProxy的生成时序图
从FactoryBean中获取对象,是以getObject()方法作为入口完成的;ProxyFactoryBean实现中的getObject方法,是FactoryBean需要实现的接口
下面一节我们将详细解析时序图中生成AopProxy的方法