程序化交易AOP?

时间:2012-02-25 19:00:39

标签: java spring aop spring-transactions

我想通过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 个答案:

答案 0 :(得分:1)

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

readOnly等属性非常重要。 readOnly事务不会刷新并结束。只是一个例子。