xdoclet 代码生成

学习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);
}






你可能感兴趣的:(xdoclet 代码生成)