移:xdoclet2学习笔记

一个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等,学习难度较大,并且没有良好的文档帮助。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值