代理對象 和目標對象 沒有實現接口
將代理對象 設置成 目標對象的 子類
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;
}
}