隨筆-4  評(píng)論-14  文章-0  trackbacks-0
          EasyJWeb中提供了一些注解,可以給開(kāi)發(fā)帶來(lái)很多方便。這些注解包括有數(shù)據(jù)驗(yàn)證用的@FormPO、@Validator等;IOC注入用的@Inject、@InjectDisable等;action配置用的@Action等。
          今天我們來(lái)說(shuō)說(shuō)action配置時(shí)要用的注解@Action,使用這些注解可以大量減少配置文件的編寫(xiě)。
          首先,我們來(lái)看看不使用這些注解的時(shí)候是怎么做的,以一個(gè)hello world程序?yàn)槔?br /> 首先是action:
          public class HelloAction extends AbstractCmdAction
          {
              
          private IHelloService servie;

              
          public IHelloService setService(IHelloService service){
                  
          this.service = service;
              }


              
          public Page doHello(WebForm form, Module module){
                  System.out.println(service.sayHello());
                  
          return null;
              }

          }

          service:
          public interface IHelloService{
              String sayHello();
          }

          service實(shí)現(xiàn):
          public class HelloServiceImpl implements IHelloService
          {
              
          public String sayHello(){
                  
          return "hello";
              }

          }

          如果要使這個(gè)程序正常運(yùn)行,我們還需要配置service和action,easyjweb中默認(rèn)集成spring,service是在spring的配置文件中配置:
              <bean id="helloService"    class="com.hello.service.impl.HelloServiceImpl">
              
          </bean>

          現(xiàn)在來(lái)配置action,在easyjweb的配置文件中這樣配置:
                  <module name="hello" path="/hello" form="" scope="request"
                      action
          ="com.hello.mvc.HelloAction" defaultPage="list"
                      inject
          ="byType">

                  
          </module>
          這里說(shuō)說(shuō)這個(gè)inject="byType",這樣配置之后在HelloAction中的屬性會(huì)自動(dòng)根據(jù)類(lèi)型來(lái)注入。inject還有byName等屬性,意思就是根據(jù)名字來(lái)注入。如果這里不加這個(gè)inject,那么配置文件就應(yīng)該是這樣寫(xiě):
                  <module name="hello" path="/hello" form="" scope="request"
                      action
          ="com.hello.mvc.HelloAction" defaultPage="list"
                      inject
          ="byType">
               
          <property name="service" ref="helloService" />
                  
          </module>
          property的name屬性對(duì)應(yīng)HelloAction中的service,名字要保持一致。ref對(duì)應(yīng)上面在spring中配置的helloService的id。
          到這里,這個(gè)程序就可以運(yùn)行了。
          一個(gè)簡(jiǎn)單的hello程序就用了這么多配置文件,這讓人難以忍受。現(xiàn)在我們就來(lái)說(shuō)說(shuō)怎么使用EasyJWeb的注解來(lái)簡(jiǎn)化配置。
          我們修改一下HelloAction的代碼,給這個(gè)類(lèi)加上一個(gè)@Action注解:
          @Action(path="hello")
          public class HelloAction extends AbstractCmdAction
          {
              
          private IHelloService servie;

              
          public IHelloService setService(IHelloService service){
                  
          this.service = service;
              }


              
          public Page doHello(WebForm form, Module module){
                  System.out.println(service.sayHello());
                  
          return null;
              }

          }

          這樣一來(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ù)提交功能的。

          posted on 2007-12-28 13:36 天 一 閱讀(1206) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 贵溪市| 温泉县| 灵丘县| 车致| 平南县| 盖州市| 伊宁市| 棋牌| 吉林省| 驻马店市| 商河县| 竹山县| 吴江市| 绩溪县| 宿松县| 彭泽县| 嵊州市| 秦皇岛市| 汉中市| 霍邱县| 桑植县| 乌兰察布市| 南召县| 游戏| 库车县| 龙岩市| 霍州市| 大埔县| 且末县| 双鸭山市| 和田市| 葫芦岛市| 南阳市| 尼玛县| 务川| 昆山市| 桦川县| 蚌埠市| 京山县| 平南县| 云浮市|