• spring事务机制


    一、Java动态代理

      1、定义

        Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

        默认情况下会采用JDK的动态代理实现AOP 。

      2、代码实现

        <tx:annotation-driven transaction-manager="userTransactionManager" />

    二、CGLIB

      1、定义

        而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

        2、代码实现   

        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
        <aop:aspectj-autoproxy expose-proxy="true"/>

    三、区别

      1、JDK代理是不需要依赖第三方的库,只要JDK环境就可以进行代理,它有几个要求
          * 实现InvocationHandler 
          * 使用Proxy.newProxyInstance产生代理对象
          * 被代理的对象必须要实现接口

       使用JDK动态代理,目标类必须实现的某个接口,如果某个类没有实现接口则不能生成代理对象。


       2、CGLib 必须依赖于CGLib的类库,Cglib原理是针对目标类生成一个子类,覆盖其中的所有方法,所以目标类和方法不能声明为final类型。

                     针对接口编程的环境下推荐使用JDK的代理。从执行效率上看,Cglib动态代理效率较高。

    爱码久成癖,得山真隽永
  • 相关阅读:
    [atARC100F]Colorful Sequences
    [atARC103D]Robot Arms
    [atARC107F]Sum of Abs
    [atAGC047F]Rooks
    [loj3278]收获
    [cf809E]Surprise me
    [cf997E]Good Subsegments
    [cf603E]Pastoral Oddities
    Codeforces Round #453
    Educational Codeforces Round 32
  • 原文地址:https://www.cnblogs.com/pinenut/p/7153719.html
Copyright © 2020-2023  润新知