Java设计模式——代理模式
代理模式 学习目标 掌握代理模式的应用场景和实现原理。 应用场景 保护目标对象:客户并不知道对象是如何实现具体业务功能的,只要调用代理对象的接口就行了。 增强目标对象:在实现目标对象的业务功能之前或者之后做一些业务实现。 Spring-AOP 实现原理 静态代理:代理对象持有被代理对象的引用。由被代理对象实现目标业务。 动态代理:代理对象持有被代理对象的引用,代码运行产生一个新的 java 类,并被编译重新加载,然后在新的类中执行目标业务实现动态代理。 了解静态代理和动态代理的区别。 静态代理:被代理对象在代码中被写死了,不易扩展,适用于简单的业务,代码复用性不高,违背开闭原则。 动态代理:只要是实现了同一个接口的被代理类,都可以代理实现,实现了业务扩展。代码复用,遵循开闭原则。 了解 CGLib和JDK-proxy 的区别。 JDK-proxy 动态代理:实现了被代理对象的接口,生成新的class字节码,利用反射调用实现代理。 无法代理不实现代理业务接口的方法。 CGLib 动态代理:继承被代理对象,生成新的class字节码,通过 fastclass 机制调用实现代理。 无法代理被final关键字修饰的方法 代理模式的定义 为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和服务端起到中介的作用。是一种结构型 设计模式 。 静态代理 /** *