自定義內(nèi)置動作(zuò)

​ 在用戶使用過程當中,如果有(yǒu)一些(xiē)自己內(nèi)部常用的操作(zuò),而這些(xiē)操作(zuò)在URule Pro中的內(nèi)置動作(zuò)中又沒有(yǒu),那(nà)麽可(kě)以利用自定義內(nèi)置動作(zuò)的方式定義自己的內(nèi)置動作(zuò)。

​ 定義內(nèi)置動作(zuò)非常簡單,隻需要在需要暴露給用戶使用的Spring bean中添加相應的annotation即可(kě)。我們先來(lái)看看URule Pro中提供的針對字符串的內(nèi)置動作(zuò)類的部分源代碼。

package com.bstek.urule.runtime.builtinaction;
import com.bstek.urule.model.library.action.annotation.ActionBean;
import com.bstek.urule.model.library.action.annotation.ActionMethod;
import com.bstek.urule.model.library.action.annotation.ActionMethodParameter;
/**
 * @author Jacky.gao
 * @since 2015年11月27日
 */
@ActionBean(name="字符串")
public class StringAction {
    @ActionMethod(name="去空(kōng)格")
    @ActionMethodParameter(names={"目标字符串"})
    public String trim(String str){
        if(str==null){
            return str;
        }
        return str.trim();
    }

    @ActionMethod(name="指定起始的字符串截取")
    @ActionMethodParameter(names={"目标字符串","開(kāi)始位置","結束位置"})
    public String substring(String str,int start,int end){
        return str.substring(start, end);
    }
    ......
}

​ 可(kě)以看到,首先我們需要在”類“層面添加一個(gè)名為(wèi)ActionBean的annotation,它隻有(yǒu)一個(gè)屬性,就是要定義這個(gè)內(nèi)置動作(zuò)的名稱。然後在需要暴露的方法中添加兩個(gè)annotation,分别是ActionMethod和(hé)ActionMethodParameter。ActionMethod是用來(lái)定義用戶看到的方法名稱的,而ActionMethodParameter則是用來(lái)定義用戶看到的各個(gè)參數(shù)名稱,它的names屬性是一個(gè)數(shù)組,要求給出的描述參數(shù)要與當前方法的參數(shù)個(gè)數(shù)匹配,如果小(xiǎo)于參數(shù)個(gè)數(shù),那(nà)麽用戶将會(huì)看到後面的參數(shù)無描述信息。

​ 在類中定義好這些(xiē)Annotation之後,将這個(gè)類配置到Spring當中,讓其成為(wèi)一個(gè)标準的Spring Bean,并為(wèi)其定義一個(gè)Bean Id,這樣URule在啓動時(shí)就會(huì)自動加載,并讓其成為(wèi)內(nèi)置動作(zuò),用戶就可(kě)以直接使用了。

定義內(nèi)置動作(zuò)的Spring Bean時(shí),一定不要忘記給這個(gè)Spring Bean定義一個(gè)Id,這樣才能保證規則在任何地方運行(xíng)都不會(huì)出錯,這點很(hěn)關鍵。

在定義內(nèi)置動作(zuò)時(shí)需要注意,如果我們規則運行(xíng)方式采用的是客戶端服務器(qì)模式,那(nà)麽必須要保證調用知識包的客戶端Spring環境裏有(yǒu)這個(gè)Bean,且Bean的Id要與動作(zuò)庫定義時(shí)的Id保證一至,否則調用會(huì)出現錯誤。

results matching ""

    No results matching ""