什么是 Spring 中 TransactionScope(.Net) 的一个有点等价的类。
问问题
1111 次
2 回答
0
@Transactional注释看起来是等价的。
这可以放在类和方法上,并且可以通过传播、隔离、回滚等来定义。
于 2012-05-30T16:31:33.613 回答
0
我对 .Net 完全一无所知,所以我不确定这是否是您正在寻找的。您可以使用SimpleTransactionScope
以在事务的整个生命周期中维护对象。默认情况下它没有注册,所以你必须像任何自定义范围一样在 spring core 中注册它,并给它一个字符串名称。然后,如果您愿意,您还可以专门创建一个注释来注册一个。
几年前,在这个问题被确定之后,我的问题就提出了这个建议。我们特别要求它用于跨多种方法注入服务的时间戳。你可以做这样的事情。
public class SimpleTransactionFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
factory.registerScope("transaction", new SimpleTransactionScope());
}
}
@Configuration
class MyConfiguration {
@Scope(scopeName = "transaction")
@Bean
Instant nowInstant() {
return Instant.now();
}
}
@Service
class MyService {
private final ObjectFactory<Instant> nowFactory;
MyService( @Qualifier("nowInstant") ObjectFactory<Instant> nowFactory ) {
this.nowFactory = nowfactory
}
@Transactional
public boolean nowisEqualAlways() {
var now = nowFactory.getObject();
var sameNow = nowFactory.getObject();
return Objects.equals( now, sameNow );
}
}
如果您不这样做,您now
实际上可能会在交易期间更改一小段时间。您可以简单地通过在测试中发送垃圾邮件来测试它。
您的需求可能不需要它,所以我很难说(很明显,您的需求可能早已过去,很有希望。尽管这对将来的某人有所帮助)
于 2021-08-18T22:29:55.257 回答