Spring框架学习[AOP通知以及编程式AOP ](三)

2014-11-24 03:05:50 · 作者: · 浏览: 5
ass[] proxyInterfaces) { setInterfaces(proxyInterfaces); } //为指定代理接口和拦截器创建AOP代理容器 public ProxyFactory(Class proxyInterface, Interceptor interceptor) { //为代理对象添加代理接口 addInterface(proxyInterface); //为代理对象添加拦截器 addAdvice(interceptor); } //根据指定目标源和代理接口创建代理容器 public ProxyFactory(Class proxyInterface, TargetSource targetSource) { addInterface(proxyInterface); //为通知设置目标源 setTargetSource(targetSource); }//获取AOP代理 public Object getProxy() { return createAopProxy().getProxy(); } //使用指定类加载器创建AOP代理 public Object getProxy(ClassLoader classLoader) { return createAopProxy().getProxy(classLoader); }//获取指定代理接口和拦截器的AOP代理 public static T getProxy(Class proxyInterface, Interceptor interceptor) { return (T) new ProxyFactory(proxyInterface, interceptor).getProxy(); } //获取指定代理接口和目标源的AOP代理 public static T getProxy(Class proxyInterface, TargetSource targetSource) { return (T) new ProxyFactory(proxyInterface, targetSource).getProxy(); } //为指定目标源创建AOP代理 public static Object getProxy(TargetSource targetSource) { if (targetSource.getTargetClass() == null) { throw new IllegalArgumentException("Cannot create class proxy for TargetSource with null target class"); } ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setTargetSource(targetSource); proxyFactory.setProxyTargetClass(true); return proxyFactory.getProxy(); }}

通过上述对ProxyFactory源码的分析可以看出,获取代理对象的getProxy()方法中,调用ProxyCreatorSupport的createAopProxy()方法获得DefaultAopProxyFactory对象,通过调用DefaultAopProxyFactory类的createAopProxy方法来调用JDK或者CGLIB创建AOP代理对象,与ProxyFactoryBean实现原理相同,通知的配置以及方法的通知链拦截调用等都与ProxyFactoryBean完全相同,这里不再赘述,请实现参考上一篇博客对ProxyFactoryBean的分析。