代理
jdk代理
被代理类必须实现接口
incoke (第一个参数:。。。。。。。。
第二个参数 :method就是代理对象内部的方法,
第三个参数:方法的参数)
public class TestZu {
public static void main(String[] args) {
//动态代理
//1..创建代理对象
FangDongImpl wangyan=new FangDongImpl();
wangyan.setName("王岩");
//2..创建jdk动态代理功能
InvocationHandler invocationHandler=new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
//在调用租房方法之前 可以编写执行业务代码 称为前置增强
System.out.println("发布租房信息");
//调用被代理的方法
wangyan.zufang();
//调用runt方法之后 编写业务代码 ---- 成为后置增强
System.out.println("租房结束");
return null;
}
};
//设置代理对象
FangDong lianjia= (FangDong) Proxy.newProxyInstance(TestZu.class.getClassLoader(),
wangyan.getClass().getInterfaces(),
invocationHandler);
lianjia.zufang();
}
}
cglib代理
代理谁就把谁设成父类
public class Test {
public static void main(String[] args) {
FangDongImpl wangyan = new FangDongImpl();
//创建代理对象
Enhancer enhancer=new Enhancer();
//设置父类: 代理谁就把谁设成父类
enhancer.setSuperclass(FangDongImpl.class);
//设置回调
enhancer.setCallback(
new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
System.out.println("开始发布租房信息");
wangyan.zufang();
System.out.println("房屋租赁结束");
return null;
}
}
);
FangDongImpl beike= (FangDongImpl) enhancer.create();
beike.zufang();
}
}
(FangDongImpl) enhancer.create();
beike.zufang();
}
}