目标对象没有实现接口时,上篇所写JDK的reflect包中的Proxy对象就不能创建.因此上篇的代理类创建就告一段落了.
本篇主要学习目标对象没有实现接口时,代理对象的创建.主要利用spring中cglib下的proxy的Enhancer类创建
public class CGlibProxyFactory implements MethodInterceptor{
private Object targetObject;
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
//new Enhancer
Enhancer enhancer = new Enhancer();
//设置Enhancer类为目标对象的子类
enhancer.setSuperClass(this.targetObject.getClass());
//设置Enhancer类的回调函数,用于拦截====需要实现接口MethodInterceptor
enhancer.setCallback(this);//this 指当前代理对象
return enhancer.create();
}
/**
* 回调时进入调用此方法
*/
@Override
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
/**
* 参数:
* object: 代理对象
* Method: 被调用的方法
* Object[]:被调用的方法参数
* MethodProxy:被调用的方法代理
*/
//1,将目标对象转换为相应的具体目标对象
TestServiceImpl testServiceImpl = (TestServiceImpl) this.targetObject;
Object result = null;
if(testServiceImpl.getUser() != null){
//2,进行方法调用
result = methodProxy.invoke(targetObject, args);
}
return result;
}
}