Posted on 2007-12-24 17:54 
G_G 阅读(1506) 
评论(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);
}