有两项服务:
BookService {
add(Book book);
...
}
和
MsgService {
add(String msg);
...
}
这两项服务是独立的。现在我想要这个:
XService {
@Transactional
addBook(Book book) {
BookService bs;
MsgService ms;
bs.add(book);
ms.add("add a new book" + book);
}
}
在这种模式中,BookService和MsgService类似于atom服务,使用Dao层来进行基本的CRUD操作,并且可能是事务性的,但不会暴露给客户端;将是XService的那个,它调用几个atom服务来完成单个事务功能(或者说完整的业务逻辑),比如addBook()。
这是我的问题:
1,这种模式可以吗?
2,如果是,XService应该在哪一层?什么是X的最佳名称?
3,XService中的@Transactional是否有效?
答案 0 :(得分:1)
看看这个问题,可能这就是你需要的:
short and easy question on spring nested transactions
还搜索“spring nested transactions”。
答案 1 :(得分:1)
模式很好,它是commonly known as a Facade。 XService
类/逻辑应保留在服务/业务层中。至于名称,这取决于你,并取决于班级实际在做什么。例如。如果它正在注册一本书,请将其命名为RegistrationService。
对于@Transactional
,请确保您的班级使用@Service
或@Component
进行注释,并确保其在Spring中的component scanned
包中。如果您包装的服务也具有@Transactional
方法,请确保事务是传播还是不传播,这取决于您的需求。