public interface Image {
void display();
}
***************************************************
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
private void loadFromDisk(String fileName){
System.out.println("Loading " + fileName);
}
}
**************************************************
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
RealImage realImage;
public MyInvocationHandler(RealImage realImage) {
this.realImage=realImage;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("调用代理类");
if(method.getName().equals("display")){
method.invoke(realImage, args);
System.out.println("调用的是卖书的方法");
return null ;
}else {
String string = (String) method.invoke(realImage,args) ;
System.out.println("调用的是说话的方法");
return string ;
}
}
}
****************************************************
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
RealImage realImage=new RealImage("dada");
MyInvocationHandler myInvocationHandler=new MyInvocationHandler(realImage);
Image proxyclass=(Image) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Image.class}, myInvocationHandler);
proxyclass.display();
System.out.println(proxyclass.getClass().getName());
}
}