java知识学习53-动态代理技术

代理的概念:不直接调用目标类,通过编写一个与目标类具有相同接口的代理类,代理类的每个方法去调用目标类的相同方法,并在调用方法时加上所要添加的功能代码。

  作用:可以不用改动目标类代码,且通过配置文件的方式切换是直接调用目标类还是调用代理类。

    

  代理的原理架构图:

    

  AOP(Aspect oriented program):面向方面的编程,即主要指交叉业务的编程问题。AOP的目标就是要使交叉业务模块化,可以采用将切面代码移到方法的周围,这与直接在方法内部编写切面代码的运行效果是一样的。而代理技术的实现AOP功能的核心和关键技术。

    

  如何解决在每个方法中添加代理功能呢?不可能在各个接口都写上对应的代码。

    

  JVM创建动态类:通过Proxy类的getProxyClass方法。

    

    

       

      如何将上面的代码一步到位,直接创建动态类和实例对象呢?可通过Proxy类的newProxyInstance方法。

      

      其内部运行原理

      

       动态代理原理:首先要给动理类的构造方法传入handler参数,client请求代理中的方法test1,就相当于调用handler的invoke方法,而invoke方法里面又实现了对目标类方法的调用,也就实现了通过调用代理类而调用目标类的效果。(可以在调用目标方法周围添加自己的代码,如log日志功能等)。

      

     动态代理类代码的进一步优化:将目标类和要添加的系统功能抽取出来,便于通用化。

    

原文地址:https://www.cnblogs.com/blogofzxf/p/14909378.html