JDK动态代理demo
先了解一下代理的概念:

/**
* @Description: 定义一个女孩,声明这个女孩想干的事
*/
public interface Girl {
void date();
void watchMovie();
}
/**
* @Date: 2022/3/5
* @Version: 1.1
* @Description: 定义一个可爱美丽的热辣美女
*/
public class HotGirl implements Girl {
public HotGirl(){
System.out.println("从前有位火辣妹子,想找个帅哥出去玩," +
"但是很难找到符合自己的,所以就去找代理机构帮忙");
}
@Override
public void date() {
System.out.println("===========女生心想,nice ,终于有帅哥和我约会啦===========");
}
@Override
public void watchMovie() {
System.out.println("===========女生心想,nice ,终于有帅哥和我看电影啦===========");
}
/**
* @Date: 2022/3/5
* @Version: 1.1
* @Description: 定义一个微信代理类,可以用来约妹子的代理
*/
public class WXProxy implements InvocationHandler {
//想要约妹子可以找我,(看,我的类里面就有妹子的属性)
//可以帮你找到妹子哦。
private Girl girl;
//这个代理有妹子的入驻。让这个代理能代理妹子
public WXProxy(Girl girl){
System.out.println("代理机构接待了这位妹子,让妹子留一份生活信息");
this.girl = girl;
}
//代理前需要做一些调查或者匹配
void proxyFront(){
System.out.println("代理机构会先看看这个男生的基本信息是否符合这位妹子," +
"做过调查后,觉得蛮匹配的让他开始约女生");
}
//想要约妹子,那也是需要条件的 前面
//你有没有钱,长的帅不帅呀
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
proxyFront();
//只有实际在调方法的时候才会到这个
Object invoke = method.invoke(girl,args);
dateAfter();
return invoke;
}
//和妹子约出去后,需要去问下女孩的感受,是否合适,有没有第二次约会之类的
void dateAfter(){
System.out.println("约会过后,代理机构去询问妹子,这个男生是否合适,有没有第二次约会意向之类的");
}
//可以看成代理机构正在为您生成女孩的基础资料(包括住址,身高,爱好等信息)
public Object getProxyInstance(){
System.out.println("代理机构就开始整理这位妹子的基础资料,并为她发布找帅哥出去玩的信息");
return Proxy.newProxyInstance(girl.getClass().getClassLoader(),girl.getClass().getInterfaces(),this );
}
}
/**
* @Date: 2022/3/5
* @Version: 1.1
* @Description: 帅哥
*/
public class HandsomeBoy {
public static void main(String[] args) {
//有一位火辣妹子
HotGirl hotGirl = new HotGirl();
//入驻这个代理机构
WXProxy wxProxy = new WXProxy(hotGirl);
//代理机构呢,为这个帅哥(类)提供这个火辣妹子
Girl girl = (Girl)wxProxy.getProxyInstance();
System.out.println("这个时候有位帅哥,看到了这位妹子的信息,觉得不错,就去找代理机构咨询");
//因为是在帅哥这个类的方法执行,可以看成帅哥成功约会到妹子
girl.date();
System.out.println("============================================");
//可以看成帅哥成功和妹子看电影
girl.watchMovie();
}
}
输出结果:


本文通过一个生动的示例展示了Java动态代理的使用,创建了一个微信代理类(WXProxy)作为中介,代理火辣美女(HotGirl)与帅哥(HandsomeBoy)的约会过程,包括前期调查、约会及后期反馈等环节,详细解释了代理类如何通过InvocationHandler接口实现代理功能。
1626

被折叠的 条评论
为什么被折叠?



