package staticProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Subject { void action();}// 被代理类class RealSubject implements Subject { @Override public void action() { System.out.println("被代理类开始执行"); }}class MyInvocationHandler implements InvocationHandler { Object obj; // 实现了接口的被代理类的对象的声明 // 1.给被代理类的对象实例化 2.返回一个代理类的对象 public Object blind(Object object) { this.obj = object; return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } //当通过代理类的对象发起对呗重写的方法调用时,都会转换为对如下的invoke方法的调用 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object returnVal = method.invoke(obj, args); return returnVal; }}public class DynamicProxy { public static void main(String[] args) { //1.被代理类的对象 RealSubject real = new RealSubject(); //2.创建了一个实现了InvocationHndler接口的类的对象 MyInvocationHandler handler = new MyInvocationHandler(); //3.调用blind()方法,动态的返回一个同样实现了real所在类实现的接口Subject的代理类对象 Object obj = handler.blind(real); Subject sub = (Subject) obj;//此时的sub就是代理类的对象 sub.action(); }}
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦