移:xdoclet2学习笔记
来源:互联网 发布:淘宝网上怎么备案啊 编辑:程序博客网 时间:2024/06/06 20:39
一个Xdoclet2插件由三部分组成:
TemplateEngine,MetadataProvider,WriterMapper,通常使用构造函数来建立一个Plugin。
TemplateEngine表示使用的模版库,可以选择JellyTemplateEngine和VelocityTemplateEngine。
MetadataProvider表示数据来源,xdoclet2通过qdox来获得java source中的tag。如果数据来源不是从java source中获得(比如数据库),也可以定义自己实现这个MetadataProvider
WriterMapper是一个流输出,xdoclet2有一个默认FileWriterMapper实现文件的数据输出
例如Struts plugin是这样定义构造函数的:
public StrutsConfigXMLPlugin(JellyTemplateEngine jellyTemplateEngine, QDoxCapableMetadataProvider metadataProvider, WriterMapper writerMapper) {
super(jellyTemplateEngine, metadataProvider, writerMapper);
setMultioutput(false);
Map dtds = Collections.singletonMap("http://struts.apache.org/dtds/struts-config_1_2.dtd",
getClass().getResource("struts-config_1_2.dtd"));
setOutputValidator(new XMLOutputValidator(dtds));
new TagLibrary(metadataProvider);
}
此构造函数说明:struts plugin采用的是Jelly模版,数据来源于java文件采用Qdox进行分析。
setMultioutput(false);表示只生产一个文件。
new TagLibrary(metadataProvider);是一个愚蠢的写法,实际上new TagLibrary只是把tag注册到DocletTagFactory,与metadataProvider和TagLibrary无关。
xdoclet2对于每一个tag都有一个具体的实现类,通过registerTag方法实现,比如 metadataProvider.getDocletTagFactory().registerTag(StrutsActionExceptionTagImpl.NAME, StrutsActionExceptionTagImpl.class);
Plugin基类是org.generma.Plugin,入口方法是start()
org.xdoclet.ant.XDocletTask类是ant入口类,它的核心引用org.xdoclet.QDoxMetadataProvider.getMetadata(),把com.thoughtworks.qdox.JavaDocBuilder作为数据的来源。
由此可见,xdoclet借助于picocontainer,generama,qdox可以很容易的编写一个插件。
但是也存在问题:
1.数据来源都存在于java的doclet中,来源到生成的代码逻辑却全部写在jelly或者velocity模版中,造成模版过于复杂。
2.生产的目标只能是文件,不支持其他流输出,对于生成的目标文件,只能是增,删,无法修改,没有一个良好的writerMapper模型
3.编写新插件需要学习太多的内容,如xdoclet,generama,picocontainer,nanocontainer,qdox,jelly/velocity等,学习难度较大,并且没有良好的文档帮助。
TemplateEngine,MetadataProvider,WriterMapper,通常使用构造函数来建立一个Plugin。
TemplateEngine表示使用的模版库,可以选择JellyTemplateEngine和VelocityTemplateEngine。
MetadataProvider表示数据来源,xdoclet2通过qdox来获得java source中的tag。如果数据来源不是从java source中获得(比如数据库),也可以定义自己实现这个MetadataProvider
WriterMapper是一个流输出,xdoclet2有一个默认FileWriterMapper实现文件的数据输出
例如Struts plugin是这样定义构造函数的:
public StrutsConfigXMLPlugin(JellyTemplateEngine jellyTemplateEngine, QDoxCapableMetadataProvider metadataProvider, WriterMapper writerMapper) {
super(jellyTemplateEngine, metadataProvider, writerMapper);
setMultioutput(false);
Map dtds = Collections.singletonMap("http://struts.apache.org/dtds/struts-config_1_2.dtd",
getClass().getResource("struts-config_1_2.dtd"));
setOutputValidator(new XMLOutputValidator(dtds));
new TagLibrary(metadataProvider);
}
此构造函数说明:struts plugin采用的是Jelly模版,数据来源于java文件采用Qdox进行分析。
setMultioutput(false);表示只生产一个文件。
new TagLibrary(metadataProvider);是一个愚蠢的写法,实际上new TagLibrary只是把tag注册到DocletTagFactory,与metadataProvider和TagLibrary无关。
xdoclet2对于每一个tag都有一个具体的实现类,通过registerTag方法实现,比如 metadataProvider.getDocletTagFactory().registerTag(StrutsActionExceptionTagImpl.NAME, StrutsActionExceptionTagImpl.class);
Plugin基类是org.generma.Plugin,入口方法是start()
org.xdoclet.ant.XDocletTask类是ant入口类,它的核心引用org.xdoclet.QDoxMetadataProvider.getMetadata(),把com.thoughtworks.qdox.JavaDocBuilder作为数据的来源。
由此可见,xdoclet借助于picocontainer,generama,qdox可以很容易的编写一个插件。
但是也存在问题:
1.数据来源都存在于java的doclet中,来源到生成的代码逻辑却全部写在jelly或者velocity模版中,造成模版过于复杂。
2.生产的目标只能是文件,不支持其他流输出,对于生成的目标文件,只能是增,删,无法修改,没有一个良好的writerMapper模型
3.编写新插件需要学习太多的内容,如xdoclet,generama,picocontainer,nanocontainer,qdox,jelly/velocity等,学习难度较大,并且没有良好的文档帮助。
- 移:xdoclet2学习笔记
- Xdoclet2(二):与Xdoclet1.X比较
- Ant + XDoclet2生成Hibernate3的配置及映射文件
- Xdoclet2(一):找回Doclipse缺失的标签提示--Qtags
- Unable to obtain goal [xdoclet2:run] com/thoughtworks/qdox/model/AbstractBaseJavaEntity
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 男孩、女孩和六个苹果的故事[慢慢看哟!]
- 工作中烦恼啊!
- 迭代器配接器(适配器)
- 推荐大家......必看的几部超级鬼片
- SPFILE的使用
- 移:xdoclet2学习笔记
- 移:该死的java中文问题
- 移:Naked Objects
- 移:使用Struts提交多行数据
- ASP.NET 2.0中将 GridView 导出到 Excel 文件中
- 移:AOP技术原理
- How can I put a checkbox in a column of my DataGrid?
- 移:Spring AOP的简单例子
- 移:使用Spring AOP实现MVC拦截器