zoukankan      html  css  js  c++  java
  • java知识学习53-动态代理技术

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

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

        

      代理的原理架构图:

        

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

        

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

        

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

        

        

           

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

          

          其内部运行原理

          

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

          

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

        

  • 相关阅读:
    MongoDB权限验证
    【大型网站开发系列第一篇】——网站结构层次
    php5.4的htmlspecialchars处理中文
    将session值字符串重新生成session
    php支持短标签
    solr suggest+autocomplete实现自动提示
    linux命令
    【技术】【转】字节序问题大端法小端法
    eeePC(易PC)变态测试!(上)
    "挑iPod不问价"就是不懂“性价比”?
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14909378.html
Copyright © 2011-2022 走看看