【问题标题】:Programmatic transactional AOP?程序化事务 AOP?
【发布时间】:2012-02-26 03:59:12
【问题描述】:

我想通过 Java 以编程方式设置以下基于 XML 的事务性 AOP:

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>

到目前为止,我有以下内容。我可以像这样创建表达式切入点:

   AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
   pointcut.setExpression("execution(* *..service.*Manager.*(..))");

然后也许使用AspectJPointcutAdvisorAspectJAroundAdvice 的组合我可以设置实际的建议。

但是,在查看支持 tx 命名空间的 Spring 代码时,似乎创建了一个 TransactionInterceptor。也许我看错了。

你问我为什么要这样做?

好吧,我已经将我的 spring 配置从 XML 移动到 @Configuration 类,但我一直在思考如何翻译 tx 命名空间的东西。虽然,我正在使用@EnableTransactionManagement@Transactional 注释,但将注释添加到上述切入点表达式匹配的所有方法中风险太大。我一定会错过一些东西。

【问题讨论】:

    标签: java spring aop spring-transactions


    【解决方案1】:

    另一方面,您将事务应用于所有匹配的方法。我不建议你这样做。在表达式中要非常具体,因为即使来自第三方库的方法也会有事务。而且这种方法的粒度也很差。正如我所见,您正在添加相同的属性。

    像 readOnly 这样的属性非常重要。只读事务不会刷新并结束。只是一个例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2010-11-03
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多