今天我們來(lái)說(shuō)說(shuō)action配置時(shí)要用的注解@Action,使用這些注解可以大量減少配置文件的編寫(xiě)。
首先,我們來(lái)看看不使用這些注解的時(shí)候是怎么做的,以一個(gè)hello world程序?yàn)槔?br /> 首先是action:













service:



service實(shí)現(xiàn):






如果要使這個(gè)程序正常運(yùn)行,我們還需要配置service和action,easyjweb中默認(rèn)集成spring,service是在spring的配置文件中配置:


現(xiàn)在來(lái)配置action,在easyjweb的配置文件中這樣配置:










到這里,這個(gè)程序就可以運(yùn)行了。
一個(gè)簡(jiǎn)單的hello程序就用了這么多配置文件,這讓人難以忍受。現(xiàn)在我們就來(lái)說(shuō)說(shuō)怎么使用EasyJWeb的注解來(lái)簡(jiǎn)化配置。
我們修改一下HelloAction的代碼,給這個(gè)類(lèi)加上一個(gè)@Action注解:














這樣一來(lái),我們就不需要easyjweb中配置的module了,當(dāng)使用hello.ejf訪(fǎng)問(wèn)的時(shí)候框架會(huì)自動(dòng)把請(qǐng)求交給HelloAction處理。
現(xiàn)在來(lái)簡(jiǎn)單介紹一下@Action這個(gè)注解。
@Action的各個(gè)屬性說(shuō)明如下:
name用來(lái)指Action的名稱(chēng),也是在容器中的Bean名稱(chēng),我們一般不使用這個(gè)屬性。
path用來(lái)指定模塊的path值,也即所映射的url,如果不設(shè)值該值將會(huì)按照缺省的方式處理。
alias用來(lái)指定這個(gè)模塊的path別名,也就是可以使用其它的一個(gè)或多個(gè)名稱(chēng)來(lái)訪(fǎng)問(wèn)這個(gè)模塊。
inject用來(lái)指定Action中所有業(yè)務(wù)組件注入方式,默認(rèn)值為按類(lèi)型注入。如果為byName則表示按名稱(chēng)注入,auto表示自動(dòng)按名稱(chēng)或類(lèi)別注入,none則表示不注入。
disInject用來(lái)標(biāo)識(shí)不自動(dòng)注入的屬性。
autoInject用來(lái)標(biāo)識(shí)允許自動(dòng)注入的屬性。
autoToken表示該模塊是否需要開(kāi)取自動(dòng)防重復(fù)提交功能;
validate表示該模塊是否開(kāi)取自動(dòng)驗(yàn)證功能,默認(rèn)情況不開(kāi)啟自動(dòng)驗(yàn)證;
view表示該模板的視圖存放子目錄。
scope用來(lái)指定這個(gè)Action在容器中的創(chuàng)建方式及生命周期,默認(rèn)值為request,表示每次請(qǐng)求創(chuàng)建一次該對(duì)象,若為session則表示個(gè)用戶(hù)會(huì)話(huà)創(chuàng)建一個(gè)對(duì)象,若為singleton表示整個(gè)容器中只創(chuàng)建一次該實(shí)例。
messageResource表示多國(guó)語(yǔ)言屬性文件的存放子目錄。
通常我們只用到path、view、inject這幾個(gè)屬性,由于inject的默認(rèn)值為"AutoJnjectByType",是最常用的,因此通常也不需要顯式指定這個(gè)屬性值。而disInject是用來(lái)標(biāo)識(shí)不允許注入的屬性的,當(dāng)我們的action出現(xiàn)了一些不需要注入的屬性時(shí),如logger,我們就需要使用這個(gè)屬性來(lái)指定哪些是不需要注入的。autoToken則是標(biāo)識(shí)是否開(kāi)啟防重復(fù)提交功能的。