zoukankan      html  css  js  c++  java
  • 对Java动态代理的理解

    关于java动态代理的理解

    之前对java的动态代理有些误解,一直以为动态代理代理的是一个对象,其实这样的理解不是准确的(主要是因为面向对象思维的固化)。动态代理应该理解为代理方法而不是一个对象,代理的本质是为了加强方法的实现,在不改动源代码的基础上对方法的功能进行增强。(我个人理解其实就是代理方法=原方法+更多操作)。如下图,动态代理类Y的方法其实就是A+B+C方法的组合。当然,在代理方法中其实可以做任何你想做的操作,甚至什么都不做都可以。

    下面我说一下我见过的两种常见的动态代理模式

    1.aop

    aop其实就是在原来的方法前后加上一些操作(即代理方法=before方法+原方法+after方法)因此在handler(继承了invocationHandler)类中要传入原方法的对象(subject)从而来调用原方法。网上的大部分对于动态代理的帖子都是用的这种例子,这正是应为这样造成了我对动态代理的误解,以为所有的动态代理类都要传入一个对象才行。事实上,只需要提供一个接口即可,动态代理就是实现接口里的方法,在这个方法里其实可以做任何的操作。

     

    2.Mybatis的MapperProxy

    mybatis框架也使用了动态代理,从下图可以看到,mybatis的动态代理和aop不一样的地方就在于,不需要传入一个代理对象来调用方法而是调用自己的方法(调用mapperMethod.execute()方法)。

     

    总结

    1.动态代理就是在运行时动态生成对象,这个对象是用来代理方法的。

    2.在这个动态代理对象的invoke方法中可以做任何操作。如果需要aop功能,则只需在invoke中加入被代理对象的方法和before、after方法即可。

  • 相关阅读:
    css 浮动元素居中
    盒子绝对定位 position:foxed ; 居中
    一些不常见的css知识
    apache 与php的安装
    dos命令
    php 数据库查询order by 与查询返回的数据类型
    最好花5分钟看一下:辞职后五险一金怎么办
    JDK神坑:JAVA中Calendar的月份Month少1
    三种代理服务器以及反向代理详解
    代理服务器基本知识普及代理IP使用方法!
  • 原文地址:https://www.cnblogs.com/lanqi/p/7851855.html
Copyright © 2011-2022 走看看