import java.lang.reflect.Method;
import java.util.Arrays;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
public class CGLIBProxy implements MethodInterceptor{
// 维护一个目标对象
private Object target;
public CGLIBProxy(Object target) {
this.target = target;
}
// 给目标对象,创建代理对象(子类代理方式)
public Object getProxyInstance() {
// 创建一个生成器, 工具类
Enhancer en = new Enhancer();
en.setSuperclass(target.getClass());// 设置父类
en.setCallback(this); // 设置回调函数
return en.create();// 创建对象
}
/**
* 事件处理程序
* proxy:cglib生成的代理对象
* method:被代理对象方法
* args:方法入参
* methodProxy: 代理方法
*/
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
// TODO Auto-generated method stub
System.out.println("开始事务");
System.out.println(Arrays.toString(args));
Object result = method.invoke(target, args); // 执行目标对象方法
Object result2 = methodProxy.invokeSuper(proxy, args);
System.out.println(result.toString()+" "+result2.toString());
System.out.println("提交事务");
return result;
}
public static void main(String[] args) {
NashornJavaScript nashornJavaScript = (NashornJavaScript)new CGLIBProxy(new NashornJavaScript()).getProxyInstance();
System.out.println(nashornJavaScript.getClass()+" nashornJavaScript.getClass()");
String info = nashornJavaScript.getInfo("aa", "bb");
System.out.println(info+" ---");
}
}