spring学习笔记--AOP代理对象【2】
续上一张 @~~@
这个是通过cglib来创建动态代理的 不需要实现PersonService接口
package javaeye;import java.lang.reflect.Method;import javaeye.service.impl.PersonServiceBean;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CGlibProxyFactory implements MethodInterceptor{private Object targetObject;public Object createProxyIntance(Object targetObject){this.targetObject = targetObject;//原先是我们Proxy的instance来创建的,在这里我们用Enhancer来创建代理对象Enhancer enhancer = new Enhancer();//设置一个父类--》就是目标类,enhancer继承了目标类(this.targerObject)的所有的方法(非final)进行覆盖enhancer.setSuperclass(this.targetObject.getClass());//回调 跟jdk的回调一样的enhancer.setCallback(this);//return enhancer.create();}//下面的跟上一章的invoke()一样public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {PersonServiceBean bean = (PersonServiceBean) this.targetObject;Object result = null;if(bean.getUser()!=null){result = methodProxy.invoke(targetObject, args);}return result;}}@Test public void proxyTest2(){CGlibProxyFactory factory = new CGlibProxyFactory();PersonServiceBean service = (PersonServiceBean) factory.createProxyIntance(new PersonServiceBean("javaeye"));service.save("javaeye");}