我很con异。我发现了有关将@Service
课程注入另一个@Service
课程的帖子。但是,如果两个类都带有@Transactional
注释怎么办?@Transactional
有所作为,或者更好的做法是注入存储库?
简单示例:
@Transactional
@Service
public class BBBServiceImpl implements BBBService {
private final BBBRepository bbbRepository;
// @Autowired constructor, methods etc...
}
第二类:
@Transactional
@Service
public class AAAServiceImpl implements AAAService {
private final AAARepository aaaRepository;
private final BBBService bbbService;
@Autowired
public AAAServiceImpl(AAARepository aaaRepository, BBBService bbbService) {
this.aaaRepository = aaaRepository;
this.bbbService = bbbService;
}
// methods etc...
}
或更佳的解决方案是:
@Transactional
@Service
public class AAAServiceImpl implements AAAService {
private final AAARepository aaaRepository;
private final BBBRepository bbbRepository;
@Autowired
public AAAServiceImpl(AAARepository aaaRepository, BBBRepository bbbRepository) {
this.aaaRepository = aaaRepository;
this.bbbRepository= bbbRepository;
}
// methods etc...
}
通常,类不应该是事务性的,而应该是它们的方法。@Transactional
如果相关项目需要交易性,则应申请。有时,这意味着您将组成多个级别,因为您甚至可以看到各个部分都需要@Transactional
。有时,这意味着堆栈中只有一个级别需要它。您必须根据软件的逻辑要求来确定。
适用的情况@Transactional
是您拥有协调订单运送的服务;用于标记已发货订单并写入包裹信息的更新应以事务方式进行。因此,OrderHandlingService#shipParcel
应该是@Transactional
和因此应任何方法涉及的数据处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句