gpt4 book ai didi

java - 程序化事务 AOP?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:12 25 4
gpt4 key购买 nike

我想通过 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 注释,但将注释添加到与上述切入点表达式匹配的所有方法中风险太大。我一定会错过一些东西。

最佳答案

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

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

关于java - 程序化事务 AOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com