package cn.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface ISubject{
public void eat(String msg, int num);//吃饭是整体的核心业务
}
class RealSubject implements ISubject{
@Override
public void eat(String msg, int num) {
System.out.println("我要吃" + num +"份量的" + msg);
}
}
class ProxySubject implements InvocationHandler{//动态代理
private Object target;//绑定一个任意的接口对象
//实现真实对象的绑定处理,并返回对象
public Object bind(Object target){
this.target = target;//保存真实主题对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
public void prepare(){
System.out.println("准备食材");
}
public void clear(){
System.out.println("收拾碗筷");
}
//真实被调用的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
this.prepare();
Object ret = method.invoke(this.target, args);//获得真实业务方法的返回值
this.clear();
return ret;
}
}
public class DynamicProxyTest {
public static void main(String[] args) {
ISubject subject = (ISubject) new ProxySubject().bind(new RealSubject());
subject.eat("鱼香肉丝", 20);
}
}
JAVASE-动态代理的基本实现
最新推荐文章于 2024-01-07 16:17:26 发布