<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0

    XDoclet是生成配置文件的強有力的工具,在使用Spring框架時,手動編寫Spring配置文件極其繁瑣,而且容易遺漏,利用XDoclet即可輕松生成配置文件。

    XDoclet支持的Spring方法注入包括:ref,list,name和value。遺憾的是,在某個項目中,我需要注入一個包含Bean引用的List:

    				
    						public void setHandlers(List handlers) {
    ? ...
    }

    然后,XDoclet并不支持元素為引用類型的List,倘若使用下列注釋:

    				
    						/**
    ?* @spring.property list="articleHandler,imageHandler"
    ?*/
    public void setHandlers(List handlers) {
    ? ...
    }

    生成的配置文件如下:

    				
    						<property name="handlers">
    ? <list>
    ??? <value>articleHandler</value>
    ??? <value>imageHandler</value>
    ? </list>
    </property>

    毫無疑問,在Spring啟動時,一個ClassCastException將被拋出,因為無法將String類型轉化為我們自定義的Handler引用類型。

    幸運的是,XDoclet良好的可擴展性使我們能夠輕松擴展需要的配置,甚至不需要我們利用XDoclet提供的API編寫代碼。XDoclet提供一種XML結構的模版語言來生成配置文件,對于Spring配置文件,對應的XML配置文件在xdoclet-spring-module-1.2.3.jar/xdoclet/modules/spring/resources/spring_xml.xdt中。

    解開jar包,修改spring_xml.xdt,增加如下XML片斷(紅色部分):

    				
    						? <XDtMethod:forAllMethods superclasses="true">
    ?? <XDtMethod:ifHasMethodTag tagName="spring.property">
    ??? <property name="<XDtMethod:propertyName/>">
    ??? <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="value">
    ????? <value><XDtMethod:methodTagValue tagName="spring.property" paramName="value"/></value>
    ??? </XDtMethod:ifHasMethodTag>
    ??? <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="ref">
    ????? <ref bean="<XDtMethod:methodTagValue tagName="spring.property" paramName="ref"/>"/>
    ??? </XDtMethod:ifHasMethodTag>
    ??? <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list">
    ????? <list>
    ????? <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list">
    ??????? <value><XDtMethod:currentToken/></value>
    ????? </XDtMethod:forAllMethodTagTokens>
    ????? </list>
    ??? </XDtMethod:ifHasMethodTag>
    				
    						??? <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list.ref">
    ????? <list>
    ??????? <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list.ref">
    ????????? <ref bean="<XDtMethod:currentToken/>"/>
    ??????? </XDtMethod:forAllMethodTagTokens>
    ????? </list>
    ??? </XDtMethod:ifHasMethodTag>
    				
    						??? </property>
    ?? </XDtMethod:ifHasMethodTag>
    ? </XDtMethod:forAllMethods>

    注意紅色部分的代碼,我們仿照list,增加一個list.ref來實現引用類型的List。
    現在,修改注釋如下:

    				
    						/**
    ?* @spring.property list.ref="articleHandler,imageHandler"
    ?*/
    public void setHandlers(List handlers) {
    ? ...
    }

    備份好原有的xdoclet-spring-module-1.2.3.jar,然后將修改后的目錄打包:

    						jar cvf xdoclet-spring-module-1.2.3.jar .
    				

    替換原來的xdoclet-spring-module-1.2.3.jar,運行XDoclet,順利生成預期配置:
    <property name="handlers">
    ? <list>
    ??? <ref bean="articleHandler"/>
    ??? <ref bean="imageHandler"/>
    ? </list>
    </property>

    類似的,我們還可以增加XDoclet對Map注入的支持。

    posted on 2006-11-05 08:32 xzc 閱讀(602) 評論(0)  編輯  收藏 所屬分類: Xdoclet
    主站蜘蛛池模板: 免费毛片在线视频| 亚洲人成伊人成综合网久久| 亚洲黄黄黄网站在线观看| 一级毛片直播亚洲| 亚洲第一AV网站| 91亚洲视频在线观看| 无人视频在线观看免费播放影院 | 亚洲激情在线视频| 亚洲男人的天堂网站| 四虎国产精品免费永久在线| 57pao一国产成视频永久免费| 日本一道高清不卡免费| 亚洲国产精品久久久久婷婷软件| 亚洲日本国产精华液| 高清免费久久午夜精品| 最近高清中文字幕无吗免费看| 亚洲va中文字幕无码| 亚洲人成在线播放| 性色午夜视频免费男人的天堂| 毛片基地免费视频a| 亚洲男人第一av网站| 免费的黄色的网站| 最近中文字幕mv免费高清电影 | 免费激情网站国产高清第一页| 国产成人精品无码免费看| 亚洲国产精品综合久久网络 | 免费a级毛片高清视频不卡| 亚洲v高清理论电影| 国产免费一区二区三区免费视频| 免费A级毛片无码无遮挡内射| 亚洲午夜无码片在线观看影院猛| 亚洲熟女综合一区二区三区| 99视频免费观看| 久久亚洲AV成人无码电影| 最近中文字幕免费大全| 国产精品亚洲一区二区三区在线| 四虎永久在线精品免费一区二区 | 国产亚洲午夜高清国产拍精品| 精品亚洲AV无码一区二区三区 | 国产成人啪精品视频免费网| 亚洲欧美自偷自拍另类视|