`
yangzb
  • 浏览: 3503283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展XDoclet对Spring List引用注入的支持

阅读更多

XDoclet是生成配置文件的强有力的工具,在使用Spring框架时,手动编写Spring配置文件极其繁琐,而且容易遗漏,利用XDoclet即可轻松生成配置文件。

XDoclet支持的Spring方法注入包括:ref,list,name和value。遗憾的是,在某个项目中,我需要注入一个包含Bean引用的List:

public void setHandlers(List handlers) {
  ...
}

然后,XDoclet并不支持元素为引用类型的List,倘若使用下列注释:

/**
 * @spring.property list="articleHandler,imageHandler"
 */
public void setHandlers(List handlers) {
  ...
}

生成的配置文件如下:

<property name="handlers">
  <list>
    <value>articleHandler</value>
    <value>imageHandler</value>
  </list>
</property>

毫无疑问,在Spring启动时,一个ClassCastException将被抛出,因为无法将String类型转化为我们自定义的Handler引用类型。

幸运的是,XDoclet良好的可扩展性使我们能够轻松扩展需要的配置,甚至不需要我们利用XDoclet提供的API编写代码。XDoclet提供一种XML结构的模版语言来生成配置文件,对于Spring配置文件,对应的XML配置文件在xdoclet-spring-module-1.2.3.jar/xdoclet/modules/spring/resources/spring_xml.xdt 中。

解开jar包,修改spring_xml.xdt,增加如下XML片断(红色部分):

  <XDtMethod:forAllMethods superclasses="true">
   <XDtMethod:ifHasMethodTag tagName="spring.property">
    <property name="<XDtMethod:propertyName/>">
    <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="value">
      <value><XDtMethod:methodTagValue tagName="spring.property" paramName="value"/></value>
    </XDtMethod:ifHasMethodTag>
    <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="ref">
      <ref bean="<XDtMethod:methodTagValue tagName="spring.property" paramName="ref"/>"/>
    </XDtMethod:ifHasMethodTag>
    <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list">
      <list>
      <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list">
        <value><XDtMethod:currentToken/></value>
      </XDtMethod:forAllMethodTagTokens>
      </list>
    </XDtMethod:ifHasMethodTag>

    <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list.ref
">
      <list>
        <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list.ref">
          <ref bean="<XDtMethod:currentToken/>"/>
        </XDtMethod:forAllMethodTagTokens>
      </list>
    </XDtMethod:ifHasMethodTag>

    </property>
   </XDtMethod:ifHasMethodTag>
  </XDtMethod:forAllMethods>

注意红色部分的代码,我们仿照list,增加一个list.ref来实现引用类型的List。
现在,修改注释如下:

/**
 * @spring.property list.ref="articleHandler,imageHandler"
 */
public void setHandlers(List handlers) {
  ...
}

备份好原有的xdoclet-spring-module-1.2.3.jar,然后将修改后的目录打包:

jar cvf xdoclet-spring-module-1.2.3.jar .

 

替换原来的xdoclet-spring-module-1.2.3.jar,运行XDoclet,顺利生成预期配置:

<property name="handlers">
  <list>
    <ref bean="articleHandler"/>
    <ref bean="imageHandler"/>
  </list>
</property>

类似的,我们还可以增加XDoclet对Map注入的支持。

分享到:
评论

相关推荐

    xdoclet1 xdoclet1 spring3.0.5、struts1.3、struts2.1、 servlet

    其中包括xdoclet2与hibernate3.6的整合xdoclet1.2.3分别与spring3.0.5、struts1.3、struts2.1、 servlet的整合配置。其中还有相应的.xdt文件模板,其中struts2.1.xdt为自己写的。 需要xdoclet1.2.3 ...

    Weblogic92+CXF+XDoclet+Spring轻松搞定webservice 例子

    在Web服务场景中,Spring可以用来管理CXF的服务bean,并负责处理服务的依赖注入。 【webservice】 Web服务是一种通过HTTP协议传输数据的方式,允许不同系统之间进行交互。在这个例子中,通过CXF和Spring的结合,...

    Ant集合Xdoclet 实例教程(之整合 Spring)

    在Java开发领域,Ant和Xdoclet是两个重要的工具,它们在构建自动化和元...建议下载后跟随教程逐步操作,以加深对Ant、Xdoclet和Spring整合的理解。同时,记得在实际项目中根据需要调整配置和注解,以满足特定的需求。

    使用xDoclet自动生成Spring的bean的配置文件

    在Java开发中,Spring框架因其强大的依赖注入和面向切面编程能力而被广泛使用。然而,手动编写XML配置文件来定义Bean可能会导致大量的重复工作,尤其是在项目规模扩大时。为了解决这一问题,开发者可以利用xDoclet...

    struts+hibernate+spring+xdoclet+ant+log4j

    **Spring** 是一个全面的企业级应用框架,它包含了AOP(面向切面编程)、DI(依赖注入)等核心特性,以及对其他框架如Struts、Hibernate的集成支持。Spring的IoC容器管理对象的生命周期和依赖关系,使得应用更易于...

    xdoclet-相关配置实例

    因此,虽然了解XDoclet的历史和工作原理对理解Java开发的演变历程有所帮助,但在实际项目中,我们更多地推荐使用现代的开发实践和技术。 在压缩包文件名“KataSoft”中,我们可以推测这可能是一个练习项目或者示例...

    xdoclet , lib

    4. **灵活性**:XDoclet支持多种框架和标准,如EJB、Hibernate、Spring等,可以自定义模板生成所需的配置。 ## XDoclet的应用场景 ### EJB(Enterprise JavaBeans) 在EJB项目中,XDoclet可以生成ejb-jar.xml、...

    Xdoclet的jar包下载了

    XDoclet是一款强大的Java文档注解工具,它能够根据源代码中的特定注解自动生成配置文件,如Java EE相关的部署描述符(如ejb-jar.xml、web.xml等)以及Spring框架的XML配置文件。这款工具在早期Java开发中尤其受欢迎...

    xdoclet-1.2.6.jar

    在"XDoclet-1.2.6"这个版本中,可能包含了对前一版本的改进和修复,以及对不同框架的支持。具体而言,这个压缩包可能包含以下内容: - `xdoclet-1.2.6.jar`: 这是XDoclet的核心库,包含了所有用于解析Javadoc注释并...

    xdoclet in action 中文版

    《XDoclet in Action》中文版是一本深入探讨XDoclet高级用法的书籍,尤其适合对自动化代码生成感兴趣的读者。XDoclet是一款强大的Java工具,它可以基于Java源代码中的注释生成各种元数据,例如EJB、Hibernate、JMX等...

    XDoclet1.2+XDoclet教程

    这个版本增强了对J2EE、Hibernate、JDO和Spring等框架的支持,使得在开发过程中能够减少手动编写重复的配置文件,提高开发效率并降低出错的可能性。 XDoclet教程通常会涵盖以下几个核心概念: 1. **注解...

    xdoclet-plugins-1.0.3.tar.gz

    "XDoclet-plugins-1.0.3.tar.gz"是一个压缩包文件,其中包含了XDoclet的多个插件,这些插件扩展了XDoclet的功能,使其能够支持更多的框架和开发需求。在解压这个文件后,你会得到一个名为"xdoclet-plugins-1.0.3"的...

    xdoclet-1.2.3.rar

    5. **扩展性**:XDoclet具有良好的扩展性,允许开发者创建自己的插件来处理特定的注解,以满足特定项目的需求。 使用XDoclet需要注意的是,虽然它能自动化很多任务,但过度依赖注解可能会导致代码可读性下降。因此...

    xdoclet-src-1.2.1.zip eclipse

    然而,有时用户可能会发现Eclipse缺少对XDoclet的支持,这可能是由于未安装相应的插件或者插件版本不匹配导致的。"xdoclet-src-1.2.1.zip eclipse缺少的这个东西"描述的可能就是这种问题,即用户在Eclipse环境中需要...

    XDoclet 与Hibernate 映射

    总结来说,XDoclet和Ant在Java开发中扮演着重要角色,前者简化了Hibernate映射文件的管理,后者则为项目构建和自动化提供了强大支持。通过合理的利用这两者,开发者可以提高工作效率,降低出错概率,使项目管理更加...

    xdoclet-bin-1.2.3

    - **持久化框架支持**:XDoclet支持Hibernate、TopLink等ORM框架,能够根据实体类上的注解自动生成持久化代码,减少手动编写SQL和DAO层的工作。 5. **使用方法** 使用XDoclet通常包括以下步骤: - 安装并配置...

    xdoclet-1.2.1.zip

    - **扩展性**:xdoclet支持插件机制,开发者可以根据需要编写自己的插件,实现自定义的代码生成逻辑,以适应不同的框架或项目需求。 - **版本兼容性**:尽管xdoclet的最新版本已经停止更新,但1.2.1版本仍然广泛...

    xdoclet-plugins-1.0.3

    - **Bean定义**:XDoclet同样可以生成Spring的bean定义,使得基于接口的编程和依赖注入更加方便,减少了XML配置的复杂性。 - **AOP配置**:对于需要面向切面编程(AOP)的场景,XDoclet也能自动生成相关的Aspect配置...

Global site tag (gtag.js) - Google Analytics