posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

xdoclet 代码生成

Posted on 2007-12-24 17:54 G_G 阅读(1467) 评论(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:forAllFields1> 循环查找
 
  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);
}







只有注册用户登录后才能发表评论。


网站导航: