3.2.4.2. 使用托管 Bean

托管给 Spring 的 bean 可以通过注入或者通过 AppBeans 类获取。作为使用 bean 的示例,看看 OrderService bean 的实现,它将具体的执行代理给了 OrderWorker bean 来做:

  1. package com.sample.sales.core;
  2. import com.haulmont.cuba.core.Persistence;
  3. import com.sample.sales.entity.Order;
  4. import org.springframework.stereotype.Service;
  5. import org.springframework.transaction.annotation.Transactional;
  6. import javax.inject.Inject;
  7. @Service(OrderService.NAME)
  8. public class OrderServiceBean implements OrderService {
  9. @Inject
  10. protected Persistence persistence;
  11. @Inject
  12. protected OrderWorker orderWorker;
  13. @Transactional
  14. @Override
  15. public BigDecimal calculateTotals(Order order) {
  16. Order entity = persistence.getEntityManager().merge(order);
  17. orderWorker.calculateTotals(entity);
  18. }
  19. }

这个例子中,服务启动一个数据库事务,将从客户端层获取的 detached 实体合并到持久化上下文,然后将控制交给 OrderWorker bean,这个 bean 包含主要逻辑。