当被代理类没有实现接口时,可以用CGLib实现动态代理
import java.lang.reflect.Method;
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 object;
private Advisor advisor;
public Object getProxyInstance(Object object, Advisor advisor){
this.object=object;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.object.getClass());
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
Object result=null;
advisor.before();
try {
result = methodProxy.invoke(object, args);
advisor.after();
} catch (Exception e) {
advisor.exception();
e.printStackTrace();
}finally{
advisor.finaller();
}
return result;
}
}
public abstract class Advisor {
public void before(){
}
public void after(){
}
public void exception(){
}
public void finaller(){
}
}