【问题标题】:Optimal @EnableTransactionManagement Configuration最佳@EnableTransactionManagement 配置
【发布时间】:2014-03-21 20:59:21
【问题描述】:

我对这个话题很困惑,并且在 Spring 4.x 文档中看到的建议很少。首先让我声明我可以以任何我想要的方式配置我的项目。静态编织、编译时编织、无等。

我只想要最佳性能。但是,如果性能差异是微秒,那么我只想要最简单的。我只关心会影响我的客户的性能差异。

好的,下面是相关选项:

  1. adviceMode=proxy, proxyTargetClass=true
  2. adviceMode=proxy, proxyTargetClass=false
  3. adviceMode=aspectJ,编译时编织
  4. adviceMode=aspectJ,加载时编织

我可以为我的应用程序初始化增加一些时间,只要它在运行时速度很快。

那么这四种配置事务管理的方式有哪些权衡呢?

是否也存在功能权衡,或者这只是性能问题?

请注意,我使用的是 Spring 4.0.2 和 Java 1.7。如果有基本上回答了这个问题的 Spring 4.0 文档,那么我道歉并将我重定向到文档。到目前为止,我已经看到文档说明了如何设置它们,但没有说明它们如何比较。谢谢!

另外请注意,网络上关于此的大多数信息确实已经过时了。所以我正在寻找当前的比较。

【问题讨论】:

    标签: spring spring-transactions aspectj-maven-plugin


    【解决方案1】:

    此配置说明如何应用事务方面。简要说明:

    adviceMode=proxy, proxyTargetClass=true Cglib 被用作代理机制。如果你使用它,cglib 必须在类路径上,你的代理类必须有非参数构造函数并且它们不能是最终的(cglib 创建一个子类作为代理)。

    adviceMode=proxy, proxyTargetClass=false 使用了jdk代理机制。您只能代理为应该是事务性的方法实现接口的类。 Jdk 代理可以类型转换为接口,但不能类型转换为原始代理类。

    因此,对于adviceMode=proxy,决定更多地取决于您的代码标准如何以及使用的代理机制会产生哪些约束。

    adviceMode=aspectJ 使用 aspectJ 库,该库执行字节码插入而不是代理。

    adviceMode=aspectJ,编译时编织 您应该在构建脚本的构建过程中加入 aspectJ 工具。

    adviceMode=aspectJ,加载时编织 检测是在运行时执行的。您必须将 aspectj 代理作为 jvm 参数。

    使用 aspectJ 更强大,可能性能更高。就您想要交易的类的限制而言,它的侵入性也较小。但是,代理模式是 Spring 开箱即用的简单解决方案。

    更多关于代理的信息在这里http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch08s06.html。 更多关于aspectJ的春天在这里http://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch07s08.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多