zoukankan      html  css  js  c++  java
  • 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动态代理效率较高。

    爱码久成癖,得山真隽永
  • 相关阅读:
    [BZOJ 1833] 数字计数
    [Codeforces 23E] Tree
    [Codeforces 23D] Tetragon
    前端基础之CSS
    前端基础之HTML
    youku项目总结(粗略总结)
    MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引
    MySQL多表查询,Navicat使用,pymysql模块,sql注入问题
    MySQL单表查询
    MySQL表关系--外键
  • 原文地址:https://www.cnblogs.com/pinenut/p/7153719.html
Copyright © 2011-2022 走看看