续上一张 @~~@ :D
这个是通过cglib来创建动态代理的 不需要实现PersonService接口
测试类:
到此为止已经实现了简单的AOP了
这个是通过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");
}
到此为止已经实现了简单的AOP了