接口
public interface Say {
void say(String message);
}
真实对象类
public class SayHello implements Say{
@Override
public void say(String message) {
System.out.println(message);
}
}
代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxySubject implements InvocationHandler {
private Object target;
public ProxySubject(Object target){
this.target = target;
}
/**
*
* @param <T> 返回的代理对象类型
* @return 返回的代理对象
*/
public <T>T getProxy(){
/**
* 三个参数
* 真实对象的类加载器
* 真是对象的接口数组
* InvocationHandler
*/
return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
/**
*
* @param proxy 代理对象
* @param method 把方法封装成对象
* @param args 参数数组
* @return 代理实例的方法调用返回的值
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("My name is Greffe.");
Object proxy_target = method.invoke(target,args[0]);
System.out.println("I miss fly!");
return proxy_target;
}
}
测试类
public class Test {
public static void main(String[] args) {
Say sh = new ProxySubject(new SayHello()).getProxy();
sh.say("Hello Wrold!");
}
}
测试结果
My name is Greffe.
Hello Wrold!
I miss fly!
Process finished with exit code 0