以spring aop的jdk实现为例,配置文件如下:
<bean id=”targetProxy” class=”org.springframework.aop.framework.ProxyFactoryBean”>
<property name=”target”>
//代理的对象
<ref bean=”sourceTarget” />
</property>
//配置的advice或advisor
<property name=”interceptorNames”>
<list>
<value>advice</value>
<value>advisor</value>
</list>
</property>
</bean>
1、targetProxy是一个factorybean,getObject时产生代理对象
2、代理对象被invoke时,把配置的advice或者advisor抽象成MethodInterceptor
3、最后把拦截链和target、method、args抽象成MethodInvocation
递归调用mi.proceed()来实现方法增强
===============================================
对于aspectj的方式有两种,配置文件或者注解
…AdvisorAutoProxyCreator类是一个BeanPostProcessor
会在getBean()过程中,初始化bean是调用postProcessAfterInitialization();创建代理对象
static {
APC_PRIORITY_LIST.add(InfrastructureAdvisorAutoProxyCreator.class);
APC_PRIORITY_LIST.add(AspectJAwareAdvisorAutoProxyCreator.class);
APC_PRIORITY_LIST.add(AnnotationAwareAspectJAutoProxyCreator.class);
}
本文介绍了Spring AOP中使用JDK动态代理实现方法增强的过程,包括代理对象的创建及MethodInterceptor的调用流程。同时对比了AspectJ的两种配置方式,并解释了AdvisorAutoProxyCreator在初始化bean时创建代理对象的作用。
1762

被折叠的 条评论
为什么被折叠?



