代理模式这种机制可以叫做AOP,在不改变原有代码的基础上,添加或者删除某些方法 例如: 要调用某个jar包中某个类的方法,但是不能改变源码,我们可以采用JDK的动态代理模式,在该方法的前后添加业务逻辑,如记录日志,权限控制等
总结回顾: 1、代理概念、分类及应用场景 为其他对象设置总代理,以控制对这个对象的访问; 代理对象起到了中介的作用,去掉了某些功能,或增加了些额外的服务。 四类: Remote Proxy -- 客户端服务器的模式 Virtual Proxy -- 资源消耗很大,或复杂的对象,需要延迟,需要时创建, Protect Proxy -- 保护和控制权限 Smart Reference Proxy -- 提供额外服务。 为什么只讲智能引用代理? 使用得多:日志处理、权限管理、事务处理... 静态代理(继承、聚合) JDK动态代理实现日志处理的功能 模拟JDK动态代理实现:在代理类Proxy和被代理类RealSubject之间,加入了invocationHandler。 调用jar包中某个类的方法,不能改源码,AOP面向切面,增加额外事务逻辑。
Proxy.newInstance(ClassLoader c,Class claz,InvocationHandler h),它是根据出入的claz被代理类或接口,通过反射以及字符串操作,拼接了一个实现被代理接口或继承被代理类的一个代理类的字符串,这个代理类中包含了与被代理类公有方法名一样的方法,同时在这些方法中都是调用的h处理类中的invoke方法,这样就达到了,实际调用被代理方法前做预处理工作。
InvocationHandler中invoke(Object 代理对象,Method 被代理对象最终要执行的方法,Object[] 方法所需参数)可以在最终方法执行前做一些方法前的预处理工作,如果在被代理类的方法执行前有多个InvocationHandler需要执行处理,那就在invoke方法中对InvocationHandler中的被代理对象做判断,如果被代理对象是InvocationHandler则继续执行invoke方法(类似拦截器原理),否则通过反射执行最终的被代理类的实现方法


常见代理模式