标签:prope color eth inter 构造 handler tde java基础 类加载
interface Subject{ public void doSomething(); } class RealSubject implements Subject{ public void doSomething(){ System.out.println("call doSomething()"); } } class ProxyHandler implements InvocationHandler{ private Object tar; public Object bind(Object tar){ this.tar = tar; return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method ,Object[] args) throws Throwable{ Object result = null; result = method.invoke(tar,args); return result; } } public class Test { public static void main(String[] args[]){ ProxyHandler proxy = new ProxyHandler(); Subject sub = (Subject) proxy.bind(new RealSubject()); sub.doSomething(); } }
其中就用到了一个ProxyHandler,实现自 InvocationHandler接口,通过传入一个真实对象,来的获取一个代理对象,需要的参数有:tar.getClass().getClassLoader()真实对象的类加载器,tar.getClass().getInterfaces()真实对象的接口,以及this,InvocationHandler本身,通过反射的机制,来获取一个代理对象, 同时在这个代理对象的方法执行函数中,写入我们的真实对象的方式执行。以便在之后的方法调用中先调用了我们的真实对象的方法;记得调用代理对象的bind 的时候要把对象向下转成真实对象的;
根据反射获得构造函数,成员变量,成员方法的更多详细代码请参考博客:https://blog.csdn.net/sinat_38259539/article/details/71799078
标签:prope color eth inter 构造 handler tde java基础 类加载
原文地址:https://www.cnblogs.com/zxx123/p/9584986.html