package 代理模式.cglib代理;
import java.lang.reflect.Method;
import org.springframework.cglib.proxy.Callback;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
/*
* 这里是cglib代理工厂的一个简单的demo.所有的方法都进行代理.如果想对指定方法进行代理,还需要进一步处理
* @author Administrator
*
*/
public class ProxyFactory {
private static Enhancer enhancer=new Enhancer();
private static Callback mi=new MethodInterceptor() {
@Override
public Object intercept(Object proxy, Method arg1, Object[] args, MethodProxy methodProxy) throws Throwable {
/**
* 切记:这里面不能调用proxy.toString()等类似的方法
* 以及不能写成methodProxy.invoke(arg0, arg1);
* 会自身调用自身,最终导致堆栈溢出.
*/
beforeProxy();
Object res = methodProxy.invokeSuper(proxy, args);
afterProxy();
return res;
}
private void afterProxy() {
System.out.println("after执行");
}
private void beforeProxy() {
System.out.println("before执行");
}
};
public static Object proxy(Class<?> clazz){
enhancer.setSuperclass(clazz);
return enhancer.create();
}
static {
enhancer.setCallback(mi);
}
}
cglib代理模式的简单demo
最新推荐文章于 2022-07-06 13:32:20 发布