1 业务对象可以通过代理把自己的业务托管起来,使客户端间接地通过代理进行业务访问
2 简单理解,就是推个主管出面,老板隐藏在幕后
3 代理模式不仅能增强原业务功能
4 更重要的是还能对其进行业务管控。对用户来讲,隐藏于代理中的实际业务被透明化了,而暴露出来的是代理业务,以此避免客户端直接进行业务访问所带来的安全隐患,从而保证系统业务的可控性、安全性。

动态代理

1 其实例化过程是动态完成的,也就是说我们不需要专门针对某个接口去编写代码实现一个代理类,而是在接口运行时动态生成。
2 构建的时候 动态注入 需要代理的对象
3 Java InvocationHandler 接口

  1. public class BlackListFilter implements InvocationHandler{
  2. private Object origin;
  3. public BlackListFilter(Object origin){..}
  4. @override
  5. public Object invoke(Object proxy,Method mth,Object[] args) throws Throwable{...;return mth.invoke(origin,arg);}
  6. }
  7. Internet internet = (Internet)Proxy.newProxyInstance(
  8. RouterProxy.class.getClassLoader(),
  9. RouterProxy.class.getInterfaces(),
  10. new BlackListFiler(new RouterProxy()));

4 其实在很多软件框架中都大量应用了动态代理的理念,如Spring的面向切面编程技术AOP

image.png