Xdoclet学习笔记(模板)

      XDoclet 提供了自己的模板引擎。该模板引擎在概念上类似于 JavaServer Pages(JSP)技术。它实质上包含两类标记:块标记(block tag)和内容标记(content tag)。块标记控制如 Java 编程语言中的 iffor 语句之类的流。内容标记打印当前解析树上下文的片段,如类名称、方法名称和参数,等等。

我可以整天谈论 XDoclet,但是如果您象我一样,那么您会希望我“给出代码”。无需多言,这里有一个简单的模板,它寻找所有的实体 Bean(EntityBean),然后打印出它们的类名称及其所有 cmp 字段的名称:


 <XDtClass:forAllClasses type="javax.ejb.EntityBean">
   Classname=<XDtClass:className/>
   <XDtProperty:forAllPropertiesWithTag tagName="ejb.persistence">
        CMP Field = <XDtMethod:propertyName/>
   </XDtProperty:forAllPropertiesWithTag>
 </XDtClass:forAllClasses>

这个简单的模板同时演示了块标记和内容标记。forAllClasses 是一个块标记示例,它遍历传递给模板引擎的所有类,这些类是通过调用 XDoclet 的 ant 构建文件中的 fileset 传递的。forAllClasses 使用 type 属性(type="javax.ejb.EntityBean")过滤掉不属于类型 javax.ejb.EntityBean 的那些类。

className 是内容标记的一个示例,它打印出当前类的名称。

forAllProperitesWithTag 是另一个块标记示例。它遍历实现类中所有具有 XDoclet 标记 @ejb.persistence 的特性(这些特性与该 bean 的 cmp 字段相关)。最后,propertyName 是内容标记的另外一个示例,因为它在遍历过程中显示当前特性名称。

由于其他所有示例都建立在这些简单概念之上,因此让我们对这些概念作一下划分。下图用黑色粗体字体显示了块标记,用红色粗体字体显示了内容标记。另外,这些块还用圆矩形框来演示其范围。

该项目的这个代码模板的输出如下:


Classname=EmployeeBean
        CMP Field = id
        CMP Field = firstName
        CMP Field = lastName
        CMP Field = phone
 
 Classname=DeptBean
        CMP Field = id
        CMP Field = name

 

要运行该模板,您的 ant 构建文件中将需要下列代码:


<target name="templatedoclet" >
   <taskdef
      name="templatedoclet"
      classname="xdoclet.DocletTask"
      classpathref="xdocpath"
   />
   <templatedoclet destdir="test">
      <fileset dir="${src}">
         <include name="**/*Bean.java"/>
      </fileset>
      <template
         templateFile="template/template.xdt"
         destinationfile="test.txt"/>
   </templatedoclet>
</target>

templatedoclet 任务用来执行模板。fileset 子元素用于指定:您只想要 src 目录中以“Bean.java”结尾的文件。模板子任务用于指定被使用的模板文件以及目标文件。上面的示例执行我较早的时候定义的模板(template/template.xdt)并将结果输出到 text.txt。请参阅下图以获取更多详细信息。

要真正地理解如何有效地开发定制 XDoclet 模板,您应该理解 XDoclet 体系结构 ― 因此请允许我先解释一下体系结构,然后再进一步讨论。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值