动态代理(尚硅谷。宋红康)

代理类和被代理类 必须实现同一套接口。








aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
// 接口
public interface Star {
void sing();
}
//目标对象
public class StarLiu implements Star {
@Override
public void sing() {
System.out.println("刘德华唱歌");
}
}
//代理对象
public class Agent {
private Star target;
public Agent(Star target) {
this.target = target;
}
public Object getAgent(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("签订合同");
Object invoke = method.invoke(target,args);
return invoke;
}
});
}
}
// 测试类
public class ProxyTest {
@Test
public void test1(){
Agent agent = new Agent(new StarLiu());
Star star = (Star) agent.getAgent();
star.sing();
}
}
浙公网安备 33010602011771号