编程式事务AOP?

3
我希望你能通过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 注释,但在所有与上述切入点表达式匹配的方法中添加注释太冒险了。我很可能会漏掉某些东西。
1个回答

1
另一方面,您正在将事务应用于所有匹配的方法。我不建议您这样做。在表达式中要非常具体,因为即使来自第三方库的方法也会有事务。而且这种方法的粒度很差。正如我所看到的,您正在添加相同的属性。
像readOnly这样的属性非常重要。只是一个示例,readOnly事务在结束时不会刷新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接