算法介绍:在代理模式中,两个对象参与处理用一个请求,接收地请求有代理对象委托给真实对象处理,通过代理对象控制请求的访问。代理对象在客户端程序和真实目标对象起一个中间桥梁的作用, 通过使用对象聚合代替继承,有效地降低了软件模块之间地耦合度。
jdk动态代理结构图分析
/** * @author bo * @Date: 2019/5/13 16:38 */ public class DynamicClient { public static void main(String[] args) { // 真实处理对象 InvocationHandler handler = new TargetImpl(); //创建代理类实例对象 ITarget target = (ITarget) Proxy.newProxyInstance(ITarget.class.getClassLoader(), new Class[]{ITarget.class}, handler); //操作方法(实际执行的是)handler中的invoke方法 target.operation(); } }
/** * ITarget接口 * @author bo * @Date: 2019/5/13 16:36 */ public interface ITarget { /** * 操作方法 */ void operation(); }
/** * ITarget目标代理类实现类 * @author bo * @Date: 2019/5/13 16:37 */ public class TargetImpl implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) { System.out.println("---method" + method.getName()); System.out.println("---动态代理类实现"); return null; } }
代理模式的应用非常广泛,在JDK中就为我们引入了动态代理技术。
动态代理,就是一个系统在没有统一接口的情况下,在运行时,动态地对那些接口不同地对象提供代理支持。
动态代理的核心是InvocationHandler接口,要使用动态代理必须实现该接口。
这个接口的委派任务是在invoke(Object proxy,Method m,Object[] args)方法里实现的
原文:https://www.cnblogs.com/Jemb/p/11585779.html