设计原理
大家都知道spring的AOP是通过代理模式实现的,那么AOP中所谓的代理模式在spring源码中是如何实现的呢,实现代理模式实质上就是需要通过一些手段得到目标对象的代理对象,那么在spring中如何得到这些个代理对象呢?
Spring常用的获取代理对象的方式有三种:
1、AspectJProxyFactory:集成spring与Aspect实现AOP
2、ProxyFactory:编程式使用AOP
3、ProxyFactoryBean:声明式使用AOP
这三个类都继承自
ProxyConfig:提供配置属性
AdvisedSupport:封装了通知与通知器
ProxyCreatorSupport:代理对象创建的辅助类
ProxyFactoryBean的配置
对于AOP代理对象的创建实现,我们从ProxyFactoryBean开始深入窥探,在深入理解ProxyFactoryBean创建代理对象之前,有必要先学会ProxyFactoryBean的配置与使用,
需要配置什么东西呢?
1、ProxyFactoryBean
2、Advisor [ 其实就是 Advice+PointCut]
3、target [目标对象]
下面来看一个配置使用的案例:
目标接口
public interface Subject {
void request();
}
目标增强对象
public class Target implements Subject {
@Override
public void request() {
System.out.println("target request ..");
}
}
Advice通知:
前置增强
public class TargetBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("target before");
}
}
bean.xml
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>com.raycloud.dmj.data.utils.Subject</value></property>
<property name="target">
<bean class="com.raycloud.dmj.data.utils.Target"/>
</property>
<property name="interceptorNames">
<list>
<value>advisor</value>
</list>
</prope