以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);
}