在原型bean中使用spring Transactional

时间:2018-10-03 08:44:46

标签: spring transactional

我想在原型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);
    }

}

1 个答案:

答案 0 :(得分:1)

事务范围的bean的初始化需要一个代理。因此,如果我们将事务性Bean定义为原型,则每个请求该Bean都会被请求,将创建一个新的代理,这效率不高。 拥有此需求的原因是什么(拥有交易原型Bean)