我想通过 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.*(..))");
然后也许使用AspectJPointcutAdvisor
和AspectJAroundAdvice
我的组合可以设置实际的建议。
然而,在查看支持tx
命名空间的 Spring 代码时,似乎 aTransactionInterceptor
已创建。也许我看错了。
你问我为什么要这样做?
好吧,我已经将我的 spring 配置从 XML 移动到 @Configuration 类,但我一直坚持如何翻译 tx 命名空间的东西。虽然,我在使用@EnableTransactionManagement
和@Transactional
注解,但是将注解添加到与上述切入点表达式匹配的所有方法中风险太大。我一定会错过一些东西。