3.4.1.2. 使用服务

为了调用服务,应该在应用程序的客户端 block 中创建相应的代理对象。各个 block 中都有一个特殊的工厂可以创建服务代理,Web 客户端:WebRemoteProxyBeanCreator、Web 门户:PortalRemoteProxyBeanCreator

代理对象工厂在相应客户端 block 的spring.xml中配置,并包含服务名称和接口。

例如,要从 sales 应用程序中的 Web 客户端调用 sales_OrderService 服务,请将以下代码添加到 web 模块的 web-spring.xml 文件中:

  1. <bean id="sales_proxyCreator" class="com.haulmont.cuba.web.sys.remoting.WebRemoteProxyBeanCreator">
  2. <property name="serverSelector" ref="cuba_ServerSelector"/>
  3. <property name="remoteServices">
  4. <map>
  5. <entry key="sales_OrderService" value="com.sample.sales.core.OrderService"/>
  6. </map>
  7. </property>
  8. </bean>

所有导入的服务都应该在 remoteServices 属性中使用 map/entry 元素声明。

CUBA Studio 自动在项目的所有客户端 block 中注册服务。

从应用程序代码的角度来看,客户端级别的服务代理对象是标准的 Spring bean,可以通过注入或通过 AppBeans 类获得。例如:

  1. @Inject
  2. private OrderService orderService;
  3. public void calculateTotals() {
  4. orderService.calculateTotals(order);
  5. }

或者

  1. public void calculateTotals() {
  2. AppBeans.get(OrderService.class).calculateTotals(order);
  3. }