自定義内置動作(zuò)

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

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

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="去空格")
    @ActionMethodParameter(names={"目标字符串"})
    public String trim(String str){
        if(str==null){
            return str;
        }
        return str.trim();
    }

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

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

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

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

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

results matching ""

    No results matching ""