Java基础 动态代理

对象有什么方法想被代理,代理就一定要有对应的方法

 

 

 这个newProxyInstance方法的返回值就是代理对象

 

代码示例:

public interface Star {
String sing(String name);
void dance();
}
----------------------------------------
public class BigStar implements Star {
private String name;

@Override
public String sing(String name) {
System.out.println(this.name + "正在唱" + name);
return "谢谢";
}
@Override
public void dance() {
System.out.println(this.name + "正在跳舞");
}


public BigStar() {
}
public BigStar(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "BigStar{name = " + name + "}";
}
}
---------------------------------------------------------------
//类的作用:创建一个代理
public class ProxyUtil {
public static Star createProxy(BigStar bigStar) {//给BigStar创建一个代理
//形参:被代理的明星对象 返回值:给明星创建的代理
Star star = (Star) Proxy.newProxyInstance(
ProxyUtil.class.getClassLoader(), //参数1:用于指定用哪个类加载器去加载生成的代理类。是谁把当前的类加载到内存的,找到它之后,再让它再去加载代理(类加载器:Java在运行的时候,需要类加载器把字节码文件加载到内存当中)
new Class[]{Star.class}, //参数2:指定接口,这些接口用于指定生成的代理长什么样,也就是有哪些方法。表示生成的代理对象可以代理Star接口里面所有的方法
new InvocationHandler() { //参数3:用来指定生成的代理对象要干什么事情
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//参数1:代理对象 参数2:要运行的方法 参数3:调用被代理的方法时传递的实参
if ("sing".equals(method.getName()))
System.out.println("准备话筒,收钱");
else if ("dance".equals(method.getName()))
System.out.println("准备场地,收钱");
//去找大明星开始唱歌或跳舞(代码表现形式:调用大明星里面唱歌或跳舞的方法)
return method.invoke(bigStar, args);
}
}
);
return star;
}
}
--------------------------------------------------------------------------
public static void main(String[] args) throws Exception {
//1.获取到明星的代理对象
BigStar bigStar = new BigStar("鸡哥");
Star proxy = ProxyUtil.createProxy(bigStar);
//再调用代理的唱歌或跳舞的方法
String result = proxy.sing("只因你太美");
System.out.println(result);
}

 

posted @   1stzz1  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示