服務(wù)定位表達(dá)式

2024-03-07 18:37 更新

在實(shí)做AJAX中我們提到服務(wù)定位表達(dá)式的概念,接下來(lái)我們?cè)敿?xì)對(duì)服務(wù)定位表達(dá)式做一個(gè)說(shuō)明。 在Dorado中服務(wù)定位表達(dá)式是用來(lái)描述服務(wù)的查找方式,即Dorado通過(guò)服務(wù)定位表達(dá)式來(lái)查找到具體服務(wù),以便于對(duì)服務(wù)進(jìn)行調(diào)用。 它的基本格式:

協(xié)議:服務(wù)名[#方法名]

這里的服務(wù)名通常是代表一個(gè)JavaBean。 目前支持的協(xié)議(協(xié)議也可以擴(kuò)展):

  • spring: 表示其后的服務(wù)名是某個(gè)Spring上下文中的Bean的id。例如:spring:ajax#toUpperCase
  • classpath: 表示其后的服務(wù)名一個(gè)類的完全限定名,當(dāng)Dorado需要調(diào)用此服務(wù)時(shí)會(huì)自動(dòng)按照單例模式來(lái)實(shí)例化該類。(此種方式不推薦使用,因?yàn)镾pring是Dorado的標(biāo)配,將服務(wù)注冊(cè)在Spring上下文中可以獲得很多額外的好處)。例如:classpath:com.bstek.dorado.sample.basic.Ajax#toUpperCase

以剛才實(shí)做的AJAX范例說(shuō)明,首先我們了解一下什么是可暴露服務(wù),在Dorado中所有的Ajax調(diào)用只能調(diào)用到那些明確聲明為可暴露服務(wù)的Java方法,否則是無(wú)法調(diào)用成功的??杀┞斗?wù)包括兩個(gè)部分:

  • 服務(wù)名稱
  • 服務(wù)定位表達(dá)式

在Ajax.java中我們利用annotation機(jī)制實(shí)現(xiàn)了spring的bean聲明:

@Component
public class Ajax {
}

另外我們?cè)赪EB-INF的doradohome的app-context.xml中添加了如下的代碼:

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

這樣系統(tǒng)默認(rèn)就會(huì)自動(dòng)掃描到Ajax類,并注冊(cè)到Spring的BeanFactory中。 而對(duì)于toUpperCase方法,我們?cè)诖颂幉捎昧薂Expose標(biāo)記:

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

@Expose標(biāo)記是Dorado專門提供的標(biāo)注,用于定義可暴露服務(wù),根據(jù)這個(gè)規(guī)則Dorado會(huì)將這個(gè)方法自動(dòng)注冊(cè)在ExposedServiceManager中,其中服務(wù)名為:ajax.toUpperCase,服務(wù)表達(dá)式為:spring:ajax.toUpperCase。由于本例采用的是spring協(xié)議,因此服務(wù)定位表達(dá)式以"spring:"作為前綴,而服務(wù)名就是Ajax.java在BeanFactory中注冊(cè)的bean的id,annotation機(jī)制會(huì)自動(dòng)將Ajax的A自動(dòng)轉(zhuǎn)換為小寫字母。 另外對(duì)于一些其他不采用annotation的系統(tǒng)我們也可以手動(dòng)的注冊(cè)可暴露服務(wù),其方法是在Spring的配置文件中添加如下的代碼:

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

如果有多個(gè)服務(wù),就在map中添加就是了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)