代理模式——CGLIB动态代理
程序员文章站
2022-06-09 21:39:39
...
CGLIB动态代理相较于JDK动态代理的优点是,即使没有接口的操作,也可以使用
被代理类
package com.zxw.cglib;
public class Star {
public void show(){
System.out.println("明星表演");
}
}
代理类
package com.zxw.cglib;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class MethodInv implements MethodInterceptor {
//创建代理对象
public Object getProxy(){
Enhancer enhancer=new Enhancer();
//类似于jdk动态代理的接口
enhancer.setSuperclass(Star.class);
enhancer.setCallback(this);
//整个设置生效
Object o = enhancer.create();
return o;
}
//相当于jdk动态代理的invoke
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
/**
* o:被代理对象
* method:被代理对象的方法
* objects:参数
* methodProxy:代理对象中方法
* */
//public void com.zxw.cglib.Star.show()
// [Ljava.lang.Object;@446cdf90
// [email protected]
System.out.println(method+"---"+objects+"---"+methodProxy);
Object o1 = methodProxy.invokeSuper(o, objects);
return o1;
}
}
测试类
package com.zxw.cglib;
public class Test {
public static void main(String[] args) {
MethodInv m=new MethodInv();
//调用动态创建代理类对象
Star star = (Star) m.getProxy();
//代理类对象中的show通过invoke调用被代理类的show
star.show();
}
}
上一篇: Java 动态代理
下一篇: 前端面试题:防抖节流