服务定位表达式

2024-03-07 18:37 更新

在实做AJAX中我们提到服务定位表达式的概念,接下来我们详细对服务定位表达式做一个说明。 在Dorado中服务定位表达式是用来描述服务的查找方式,即Dorado通过服务定位表达式来查找到具体服务,以便于对服务进行调用。 它的基本格式:

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

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

  • spring: 表示其后的服务名是某个Spring上下文中的Bean的id。例如:spring:ajax#toUpperCase
  • classpath: 表示其后的服务名一个类的完全限定名,当Dorado需要调用此服务时会自动按照单例模式来实例化该类。(此种方式不推荐使用,因为Spring是Dorado的标配,将服务注册在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标记是Dorado专门提供的标注,用于定义可暴露服务,根据这个规则Dorado会将这个方法自动注册在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中添加就是了。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号