Java 动态代理
程序为什么需要代理?
- 对象如果嫌身上干的事情太多,可以通过代理来转移部分职责
- 对象有什么方法写被代理,代理就一定要有对应的方法
定义接口
public interface Star {
String sing(String name);
void dance();
}
定义继承接口重写类
public class BigStar implements Star{
private String name;
public BigStar(String name){
this.name = name;
}
public String sing(String name){
System.out.println(this.name + "正在唱" + name);
return "谢谢!谢谢";
}
public void dance(){
System.out.println(this.name + "正在跳舞");
}
}
主方法运行
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
Star star = new BigStar("小明");
/*
ClassLoader loader,Class<?>[] interfaces,InvocationHandler h
参数1:用于指定一个类加载器
参数2:指定生成的代理长什么样子,有哪些方法
参数3:用来指定生成的代理对象要干什么事情
*/
Star starProxy = (Star) Proxy.newProxyInstance(BigStar.class.getClassLoader(), BigStar.class.getInterfaces(), (Object proxy, Method method, Object[] args1) -> {
if (method.getName().equals("sing")){
System.out.println("准备话筒");
}else if (method.getName().equals("dance")){
System.out.println("准备场地");
}
return method.invoke(star,args1);
});
starProxy.dance();
String text = starProxy.sing("好日子");
System.out.println(text);
}
}
结果输出
准备场地
小明正在跳舞
准备话筒
小明正在唱好日子
谢谢!谢谢
评论 (0)