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