gpt4 book ai didi

Spring AOP : Replace XML with annotations for transaction management?

转载 作者:行者123 更新时间:2023-12-01 15:24:58 28 4
gpt4 key购买 nike

我想知道是否可以替换此代码:

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="saveFile" isolation="SERIALIZABLE" propagation="REQUIRED" no-rollback-for="BusinessException" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>

<!--Transaction aspect-->
<aop:config>
<aop:pointcut id="businessOperation"
expression="execution(* com.application.app.business.*.*(..)) || execution(* com.application.app.logic..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="businessOperation" />
</aop:config>

有完整的注释但根本没有 XML?我的意思是定义一个方面,在事务管理器上做同样的事情。

我能够定义切面和切入点,但我不知道如何获取事务管理器并对其执行操作。

预先感谢您的回答。

最佳答案

什么 <tx:advice /> 基本上是注册一个 TransactionInterceptor 得到 PlatformTransactionManager <tx:method /> 注入(inject)和设置不同的规则元素。

要复制类似下面的内容,应该在基于 Java 的配置中完成。

@Bean
public TransactionInterceptor transactionInterceptor(PlatformTransactionManager transactionManager) {
return new TransactionInterceptor(transactionManager, transactionAttributeSource());
}

@Bean
public NameMatchTransactionAttributeSource transactionAttributeSource() {
NameMatchTransactionAttributeSource tas = new NameMatchTransactionAttributeSource();
RuleBasedTransactionAttribute gets = new RuleBasedTransactionAttribute();
gets.setReadOnly(true);

RuleBasedTransactionAttribute saveFile = new RuleBasedTransactionAttribute(8, Collections.singletonList(new NoRolebackRuleAttribute(BusinessException.class);

Map<String, AttributeSource> matches = new HashMap<>();
matches.put("get*", gets);
matches.put("saveFile", saveFile);
return tas;
}

现在下一部分是您需要手动定义切点。为此,您需要构建一个 AspectJExpressionPointcutAdvisor .这也是 <aop:pointcut /> 所做的。标签。

@Bean
public AspectJExpressionPointcutAdvisor transactionAdvisor(TransactionInterceptor advice) {
AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor();
advisor.setAdvice(advice);
advisor.setExpression("execution(* com.application.app.business.*.*(..)) || execution(* com.application.app.logic..*.*(..))");
return advisor;
}

如果你想复制 xml 配置,这应该是你需要做的。但是我建议转到 @Transactional相反,这更容易设置。

关于 Spring AOP : Replace XML with annotations for transaction management?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706534/

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