自定義内置動作(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)别是ActionMethod和ActionMethodParameter。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)會出現錯誤。