代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。


我们有多种不同的方式来实现代理。如果按照代理是创建的时期来进行分类的话, 可以分为两种

  • 静态代理:由程序员创建或特定工具自动生成源代码,在对其编译。在程序员运行之前,代理类.class文件就已经被创建了
  • 动态代理:可以动态创建代理并且处理对所代理方法的调用,在动态代理上所做的调用都会被重定向到单一的调用处理器上,它的工作是揭示调用类型并确定相应的对策,Spring AOP默认使用动态代理

只要想将额外的操作从实际对象中分离到不同的地方,特别是当想要很容易做出修改,从没有使用额外操作转为使用这些操作,代理就显得很有用

静态代理有一个最大的缺陷:接口与代理类是1对1的,有多个接口需要代理,就需要新建多个代理类,繁琐,类爆炸

  • 同时代理多个类,依然会导致类无限制扩展
  • 如果类中有多个方法,同样的逻辑需要反复实现