欢迎来到天天文库
浏览记录
ID:25241864
大小:96.17 KB
页数:24页
时间:2018-11-19
《xdoclet设计心得》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、设计心得——用XDoclet减少代码膨胀(转)2007年09月14日星期五下午11:07开放源代码的XDoclet代码生成引擎,是许多领先的Java框架不可缺少的组成部分,常常被用作面向属性的编程和持续集成的引擎。但是XDoclet还有一些不太惹人注目的地方:对初级开发人员来说,它太难掌握、太难精通。在这篇文章中,流行作者SingLi以XDoclet为对象,揭示了其内部简单却优雅的设计,使您能够理解这项技术,并将它应用在实践当中。 XDoclet能够很容易成为您的Java编程工具箱中的一个更加通用的跨技术代码生成工具。不幸的是,开发人员经常忽视XDoclet的一般用途,只有将它捆绑在
2、大型开发框架或者IDE中,作为其中的一个隐藏元素时,才会用到它。人们常常认为很难将XDoclet应用在定制解决方案上。这篇文章的目的就是要消除这个迷惑,把XDoclet从常见的复杂陷阱中解脱出来,并向您展示了如何能够利用这个代码生成引擎。 我会用一个实际的例子演示XDoclet的用途,该例子将接收一个POJO(plainoldJavaobject),并用XDoclet生成完整Web应用程序的全部文件,这些文件是把数据输入关系数据库所必需的。该示例使用了XDoclet的自定义模板代码生成功能,以及它对Hibernate对象关系映射工具、StructWeb应用程序框架和应用程序服务器的内
3、部支持。(请参阅参考资料)。bitsCN.com中国网管联盟 智能代码生成器 XDoclet的核心功能是根据以下组合来生成代码的(或者生成其他配置/数据文件): 进行特殊标记的Java源文件。 预先定义的模板。 与其他基于模板的代码生成技术(例如Velocity;请参阅参考资料)相比,XDoclet具有以下独特优势: XDoclet与ApacheAnt(请参阅参考资料)紧密集成,从而提供了高度自动化的操作。 把控制代码生成和模板处理的XDoclet标签作为内联注释嵌入到Java源代码文件中。这消除了同步多个相关文件和控制文件的需要。 XDoc
4、let的内置Java解析器使用它对Java代码结构的深入理解,为输入的Java代码建立内部结构模型。该结构模型又经常被叫作元数据(metadata),因为它包含与关联代码有关的数据。 XDoclet的模板生成逻辑拥有对输入Java代码的内部结构模型的完全访问权。 接下来,我将进一步研究XDoclet是如何工作的,以帮助您理解这些特性。 XDoclet操作 图1显示了XDoclet要求的输入和生成的输出。 图1.XDoclet黑盒子需要什么来搜一搜吧so.bitsCN.com 您可以看到,包含嵌入式XDoclet标签的Java源代码是系统的输入。在Apa
5、cheAnt的驱动下,XDoclet处理输入的代码,生成的输出文本文件可以是Java源代码、HTML页面、XML文件等。为了处理输入,XDoclet需要使用模板(保存在.xdt文件中)和标签处理器(用Java编码)。XDoclet把模板和标签处理器打包成“模块”,不同的“模块”处理不同的问题域。 XDoclet生成的结构模型 XDoclet对包含嵌入式XDoclet标签的输入Java源代码进行解析,并为代码建立非常详细的结构模型。结构模型中的每个元素都代表源代码中的一个Java结构。图2显示的结构模型,揭示了XDoclet跟踪的代码构造和关系。 图2.XDoclet的解析
6、的Java源代码的内部结构模型 图2中的结构模型跟踪类、接口、方法之类的代码构造(模型元素)。该模型还跟踪元素之间的关系,例如继承和接口实现。以内联注释的形式嵌入在源代码中的XDoclet标签被解析为模型元素的属性,并被跟踪。bbs.bitsCN.com国内最早的网管论坛 通用的Javadoc引擎 能够理解Java代码结构模型的智能代码生成引擎不是什么新概念。实际上,它是JDK自带的Javadoc工具的运作方式。通过解析带有特殊Javadoc标签的Java源文件,Javadoc工具可以为所有Java程序的内置结构元素(包括类、接口、字段和方法)生成HTML文档。Java
7、doc还具有特殊Java语言概念方面的知识,例如继承、抽象类、存储类和修饰符。 XDoclet的诞生,来自这样一个观察:适用于任意代码生成的Javadoc的通用版本,在许多编程场合下会极为有用。但是,实际的Javadoc源代码不是为通用的代码生成设计的,而只是为了生成HTML文档。由于无法重用现有代码,XDoclet开发小组从头开始重写了引擎,并显著优化了它的性能。 深入XDoclet 图3显示了XDo
此文档下载收益归作者所有