java spring:将其他独立服务组装成单个服务

时间:2013-03-25 03:59:40

标签: java spring design-patterns transactions spring-transactions

有两项服务:

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是否有效?

2 个答案:

答案 0 :(得分:1)

看看这个问题,可能这就是你需要的:
short and easy question on spring nested transactions
还搜索“spring nested transactions”。

答案 1 :(得分:1)

模式很好,它是commonly known as a FacadeXService类/逻辑应保留在服务/业务层中。至于名称,这取决于你,并取决于班级实际在做什么。例如。如果它正在注册一本书,请将其命名为RegistrationService。

对于@Transactional,请确保您的班级使用@Service@Component进行注释,并确保其在Spring中的component scanned包中。如果您包装的服务也具有@Transactional方法,请确保事务是传播还是不传播,这取决于您的需求。