Dorado 7 : 07. 服务定位表达式(SEFC)

在实做AJAX中我们提到服务定位表达式的概念,接下来我们详细对服务定位表达式做一个说明。

在Dorado7中服务定位表达式是用来描述服务的查找方式,即Dorado7通过服务定位表达式来查找到具体服务,以便于对服务进行调用。
它的基本格式:

协议:服务名[#方法名]

这里的服务名通常是代表一个JavaBean。
目前支持的协议(协议也可以扩展):

  • spring: 表示其后的服务名是某个Spring上下文中的Bean的id。例如:spring:ajax#toUpperCase
  • classpath: 表示其后的服务名一个类的完全限定名,当Dorado7需要调用此服务时会自动按照单例模式来实例化该类。(此种方式不推荐使用,因为Spring是Dorado7的标配,将服务注册在Spring上下文中可以获得很多额外的好处)。例如:classpath:com.bstek.dorado.sample.basic.Ajax#toUpperCase

以刚才实做的AJAX范例说明,首先我们了解一下什么是可暴露服务,在Dorado中所有的Ajax调用只能调用到那些明确声明为可暴露服务的Java方法,否则是无法调用成功的。可暴露服务包括两个部分:

  • 服务名称
  • 服务定位表达式

在Ajax.java中我们利用annotation机制实现了spring的bean声明:

@Component
public class Ajax {
}

另外我们在WEB-INF的doradohome的app-context.xml中添加了如下的代码:

<context:component-scan base-package="com.bstek.dorado.sample" />

这样系统默认就会自动扫描到Ajax类,并注册到Spring的BeanFactory中。
而对于toUpperCase方法,我们在此处采用了@Expose标记:

@Expose
public String toUpperCase(String str) {
	return "input:\n" + str + "\n\n" + "output:\n"
			+ str.toUpperCase();
}

@Expose标记是Dorado7专门提供的标注,用于定义可暴露服务,根据这个规则Dorado7会将这个方法自动注册在ExposedServiceManager中,其中服务名为:ajax.toUpperCase,服务表达式为:spring:ajax.toUpperCase。由于本例采用的是spring协议,因此服务定位表达式以"spring:"作为前缀,而服务名就是Ajax.java在BeanFactory中注册的bean的id,annotation机制会自动将Ajax的A自动转换为小写字母。
另外对于一些其他不采用annotation的系统我们也可以手动的注册可暴露服务,其方法是在Spring的配置文件中添加如下的代码:

<bean parent="dorado.exposedServiceRegister">
<property name="services">
<map>
	<entry key="ajax#toUpperCase" value="spring:ajax#toUpperCase" />
</map>
</property>
</bean>

如果有多个服务,就在map中添加就是了。