我想在原型bean中使用spring事务管理功能。我做了以下事情:
javax.inject.Provider
创建了我的原型bean。@Transactional
注释了原型bean的方法。这是正确的方法吗?
@Service
public class SomeService {
@Autowired
private Provider<SomePrototype> myPrototypeProvider;
public void execute() {
SomePrototype somePrototype = myPrototypeProvider.get();
somePrototype.someMethod();
}
}
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class SomePrototype {
@Autowired
private SomeSpringBean someSpringBean;
@Autowired
private SomeRepository someRepository;
@Transactional(propagation = Propagation.REQUIRED)
public void someMethod() {
Result result = someSpringBean.doSomething();
someRepository.save(result);
}
}
答案 0 :(得分:1)
事务范围的bean的初始化需要一个代理。因此,如果我们将事务性Bean定义为原型,则每个请求该Bean都会被请求,将创建一个新的代理,这效率不高。 拥有此需求的原因是什么(拥有交易原型Bean)