public interface Star {
void talk();
void sing();
void charge();
}
创建接口实现类
public class RealStar implements Star {
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("RealStar.talk()");
}
@Override
public void sing() {
// TODO Auto-generated method stub
System.out.println("是谁在唱歌,温暖了寂寞,白云拥有蓝天依旧泪水在唱歌");
}
@Override
public void charge() {
// TODO Auto-generated method stub
System.out.println("RealStar.charge()");
}
}
创建代理类
public class StarHandler implements InvocationHandler{
//传入需要代理的对象
private Star star;
public StarHandler(Star star) {
super();
this.star = star;
}
/*
* proxy:代理对象,newProxyInstance方法的返回对象
* method:调用的方法
* args:调用方法中的参数
*
* */
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
//调用对象的方法
method.invoke(star, args);
return null;
}
}
创建客户端实现动态代理
public class Client {
public static void main(String[] args) {
//需要代理的对象
Star star=new RealStar();
//代理类
StarHandler sh=new StarHandler(star);
/*
* 第一个参数:用哪个类加载器去加载代理对象
* 第二个参数:动态代理类需要实现的接口
* 第三个参数:动态代理方法在执行时,会调用代理类里面的invoke方法去执行
* */
Star newProxyInstance = (Star)Proxy.newProxyInstance(star.getClass().getClassLoader(),
new Class[]{Star.class}, sh);
//通过动态代理来实现方法
newProxyInstance.sing();
}
}