posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          xdoclet 代碼生成

          Posted on 2007-12-24 17:54 G_G 閱讀(1495) 評論(0)  編輯  收藏 所屬分類: javaGeneral
          學習xdoclet 發現是很有用的。易于規范,使用方便;
          參考: http://blog.easyjf.com/html/blog/20061127/3290288676803397.htm
          官方完整API: Template Language (*.xdt)

          因為參考中:是還是比較復雜的例(數本人愚鈍^_^)特留一文:
          1>ant編輯文件
          <?xml?version="1.0"?encoding="UTF-8"?>
          <project?name="xdocletExample"?default="doall"?basedir=".">
          ????
          <property?name="basedir"?location="E:\ue_test\xdoclet"?/>
          ????
          <property?name="xdoclet.lib.dir"?location="D:\hbn\hibernate-3.2\xdoclet-1.2.3\lib"?/>

          ????
          <property?name="gen.src.dir"?location="${basedir}/target"?/>
          ????
          <property?name="src.dir"?location="${basedir}/src"?/>
          ????
          <property?name="template.dir"?location="${basedir}/template"?/>
          ????
          <property?name="customtag.dir"?location="${basedir}/bin"?/>

          ????
          <path?id="xdoclet.lib.path">
          ???????
          <fileset?dir="${xdoclet.lib.dir}"?includes="*.jar"?/>
          ????
          </path>

          ????
          <taskdef?name="xdoclet"?classname="xdoclet.DocletTask"?classpathref="xdoclet.lib.path"?/>???

          ????
          <target?name="init"?/>

          ????
          <target?name="daogener"?depends="init">
          ???????
          <xdoclet?destdir="${gen.src.dir}">
          ???????????
          <fileset?dir="${src.dir}"?includes="${cjava.file}"?/>
          ???????????
          <template?templateFile="${xdt.file}"?acceptInterfaces="false"?acceptAbstractClasses="false"?destinationfile="{0}DAO.java"?/>
          ???????
          </xdoclet>
          ????
          </target>

          ????
          <target?name="doall"?depends="daogener,daoimplgener"?/>

          </project>

          在運行上面文件時候動態輸入參數
          ?1.依照的 .java 文件( cjava.file );
          ?2.依照的 .xdt.file 文件( xdt.file );

          比如DOS中輸入:
          E:\ue_test\xdoclet>ant daogener
          -Dxdt.file=template\daointerface.xdt
          -Dcjava.file=test\TestXDoclet.java

          2.參考的java文件(簡單過頭了 呵呵)
          package?test;
          ??
          /**
          ??*?@hasRef
          ??
          */
          public?class?TestXDoclet{
          ????
          /**
          ?????*?@ref.model?name="sytp"
          ?????
          */
          ????
          private?PubSystype?sytp;

          ????
          private String gg;
          }

          3.xdt 模板
          ? 標簽解釋:
          ? <XDtClass:ifHasClassTag?tagName="hasRef">判斷 java文件中有 @hasRef
          ?
          <XDtField:forAllFields>? 1> 循環查找
          ?
          ? 2>判斷有@ref.model?name=。。
          ? <XDtField:ifHasFieldTag?tagName="ref.model"?paramName="name">
          ?
          ? 3>取值
          ??
          <XDtField:fieldTagValue?tagName="ref.model"?paramName="name"?/> ?

          package?com.hycs.bs.client.itf;

          import?java.util.List;

          //這是?packageName.className?這和好理解
          import?
          <XDtPackage:packageName?/>.<XDtClass:className?/>;

          public?interface?
          <XDtClass:className?/>DAO?{

          ????//添加
          ????boolean?add(
          <XDtClass:className?/>?instance);
          ????
          ????//邏輯添加
          ????
          <XDtClass:ifHasClassTag?tagName="hasRef">
          ????????boolean?add(
          <XDtClass:className?/>?instance,
          ????????????????
          <XDtField:forAllFields>
          ????????????????????
          <XDtField:ifHasFieldTag?tagName="ref.model"?paramName="name">?
          ????????????????????????String?
          <XDtField:fieldTagValue?tagName="ref.model"?paramName="name"?/>
          ????????????????????
          </XDtField:ifHasFieldTag>
          ????????????????
          </XDtField:forAllFields>);??
          ????
          </XDtClass:ifHasClassTag>

          ????//更新
          ????boolean?update(
          <XDtClass:className?/>?instance);


          ????//得到一個對象
          ????
          <XDtClass:className?/>?get(String?pkid);
          }

          運行DOS->
          E:\ue_test\xdoclet>ant daogener
          -Dxdt.file=template\daointerface.xdt
          -Dcjava.file=test\TestXDoclet.java

          得到的代碼:
          package?com.hycs.bs.client.itf;

          import?java.util.List;

          //這是?packageName.className?這和好理解
          import?test.TestXDoclet;

          public?interface?TestXDocletDAO?{

          ????
          //添加
          ????boolean?add(TestXDoclet?instance);
          ????
          //邏輯添加
          ????????boolean?add(TestXDoclet?instance,String?sytp);?
          ????
          //更新
          ????boolean?update(TestXDoclet?instance);

          ????
          //得到一個對象
          ????TestXDoclet?get(String?pkid);
          }






          主站蜘蛛池模板: 高碑店市| 华亭县| 申扎县| 合作市| 全州县| 稻城县| 辽宁省| 黎城县| 子长县| 易门县| 永城市| 河间市| 荔波县| 绥棱县| 鹤山市| 邹城市| 南陵县| 黄骅市| 清新县| 五峰| 奉化市| 仁怀市| 宣化县| 阜新市| 仙游县| 宾阳县| 韩城市| 景泰县| 本溪| 民勤县| 皋兰县| 崇左市| 千阳县| 泸溪县| 梁平县| 兴化市| 武威市| 安乡县| 上杭县| 永年县| 锦屏县|