代理对象 和目标对象 没有实现接口
将代理对象 设置成 目标对象的 子类
package xxl.aop.one.service.proxy;
import java.lang.reflect.Method;
import xxl.aop.one.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 argertObject = null;
public Object createProxyInctance(Object object) {
this.argertObject = object;
//代理对象类
Enhancer enhancer = new Enhancer();
//将目标对象设置为代理对象的父类
enhancer.setSuperclass(object.getClass());
//设置本身为 回调用对象
enhancer.setCallback(this);
// 生成并返回代理对象
return enhancer.create();
}
/**
* @param proxyObject 代理对象
* @param method 被拦截到的方法
* @param args 被拦截到的方法的参数列表
* @param methodProxy 代理方法对象
*/
public Object intercept(Object proxyObject, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
PersonServiceBean bean = (PersonServiceBean) this.argertObject;
Object result = null;
if (bean.getUser() != null){
result = methodProxy.invoke(this.argertObject, args);
}
return result;
}
}