最初看Spring相关书籍,讲到AOP部分,都会首先讲解代理模式、动态代理相关内容,现在看来,java框架中代理模式是使用非常频繁的,如注解、AOP、RPC等。
代理模式
代理模式,通俗来讲,就是派出一个“代表”,代表真实对象与外界交互。”代表“ 除了实现真实对象的逻辑外,还可以增加额外的功能,比如权限校验、注解解析等。java中实现代理通常有静态代理,动态代理之分。
静态代理:在编译时真实对象已经被替换成代理对象了,通常是真实对象(AService)和代理对象(ProxyService)实现同一个接口(SpringmaService),代理类引入真实对象,因此代理对象在真实对象的基础上实现了额外功能,通过多态的特性,在调用方真实使用的是代理对象。
动态代理:在初始化时,利用反射、继承或编码,动态生成代理实例。
JDK动态代理:静态代理是在编码阶段,通过实现接口来创建具体的代理类,但是这种方式不够灵活,每增加一个方法或接口,都需要额外编码。JDK动态代理就是实现了接口,但是通过反射技术将生成代理对象的时机放在运行时,自动创建代理对象。
接口:
public interface ProxyTestInterface {
void printString();
}
真实实现:
public class ProxyTestImpl implements ProxyTestInterface {
private final static Logger LOG = LoggerFactory.getLogger(ProxyTestImpl.class);
@Override
public void printString() {