CGLIB动态代理:与JDK相比,不需要创建接口
代码实现:
对象类:
public class FD {
public void zf(){
System.out.println("--出租4号楼1层--");
}
}
代理类:
public class MethodInv implements MethodInterceptor {
//产生代理类对象
public Object getProxy(){
Enhancer en=new Enhancer();
//类似于之前的接口
en.setSuperclass(FD.class);
en.setCallback(this);
//使整个设置的内容生效
Object o = en.create();
return o;
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
/**
* o:被代理对象
*
* method:被代理对象的方法
*
* objects:参数
*
* methodProxy:代理对象中方法
* */
System.out.println(method+"---"+objects+"---"+methodProxy);
System.out.println("--收取管理费100元--");
//调用真正房东的zf()
Object o1 = methodProxy.invokeSuper(o, objects);
System.out.println("--收取管理费500元--");
return o1;
}
}
测试类:
public class Test {
public static void main(String[] args) {
MethodInv m=new MethodInv();
FD proxy = (FD) m.getProxy();
proxy.zf();
}
}