package d9_proxy;
/**
* FileName: Test
* Author: lps
* Date: 2022/4/26 13:02
* Sign:刘品水 Q:1944900433
* 学习开发一个动态代理对象出来 理解动态代理执行流程
*/
public class Test {
public static void main(String[] args) {
//创建一个对象 对象的类必须实现接口
star s = new star("张伟");
Skill s2 = StarAgentProxy.getProxy(s);
s2.jump();
s2.sing();
}
}
package d9_proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* FileName: StarAgent
* Author: lps
* Date: 2022/4/26 13:12
* Sign:刘品水 Q:1944900433
*/
public class StarAgentProxy {
/**
* 设计一个方法返回一个明星对象的代理对象
* static Object newProxyInstance(ClassLoader loader,
* Class<?>[] interfaces,对象的实现接口列表
* InvocationHandler h)
* 返回指定接口的代理实例,该代理实例将方法调用分派给指定的调用处理程序。
*/
public static Skill getProxy(star s) {
//为star这个对象生成代理对象
return (Skill) Proxy.newProxyInstance(s.getClass().getClassLoader(),
s.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("请掏出首付");
Object rs = method.invoke(s, args);
//method正在调用方法对象 args代表这个方法的参数
System.out.println("收尾款 接回star");
return rs;
}
});
}
}
package d9_proxy;
/**
* FileName: star
* Author: lps
* Date: 2022/4/26 13:03
* Sign:刘品水 Q:1944900433
*/
public class star implements Skill {
private String name;
public star() {
}
public star(String name) {
this.name = name;
}
@Override
public void jump() {
System.out.println(name + "开始跳舞");
}
@Override
public void sing() {
System.out.println(name + "开始唱歌");
}
}
package d9_proxy;
/**
* FileName: Skill
* Author: lps
* Date: 2022/4/26 13:03
* Sign:刘品水 Q:1944900433
*/
public interface Skill {
void jump();//跳
void sing();//唱
}
![]()