`
junjunbest
  • 浏览: 40157 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

基于XBean简化spring配置文件

阅读更多
昨天看到一篇文章, Craig Walls介绍了一种利用XBean简化spring配置文件的做法. spring配置文件的功能很简单, 其语法规定也相对简明, 手工编写起来并不算困难, 但是写的多了也有人觉得冗长不堪. Craig Walls的方法大致相当于是引入一种自定义标签机制来增强表达能力(expressive).

标准的配置方式如下:
<beans>
  <bean id="quest"
      class="com.springinaction.chapter01.knight.HolyGrailQuest"/>

  <bean id="knight"
      class="com.springinaction.chapter01.knight.KnightOfTheRoundTable">
    <property name="moniker">
      <value>Bedivere</value>
    </property>
    <property name="quest">
      <ref bean="quest"/>
    </property>
  </bean>
</beans>

通过org.xbean.spring.context.XmlWebApplicationContext, 我们可以使用如下方式:
<beans xmlns:k="java://com.springinaction.chapter01.knight">
  <k:HolyGrailQuest id="quest" />

  <k:KnightOfTheRoundTable id="knight" moniker="Bedivere">
    <property name="quest" ref="quest" />
  </k:KnightOfTheRoundTable>
</beans>
在这种方式中, property, value等spring特定的结构描述标签被具有明确业务含义的moniker等名字所代替, 写法变得更加紧凑也更加自然, 标签的语义表达能力得到了很大的提高.

     以上的方法中存在一个问题, 即自定义标签的属性名可能和spring内置的属性名冲突, 例如上例中id属性所指定的是spring所使用的id值, 而不是KnightOfTheRoundTable类的属性. 为了解决名字冲突的问题, Craig Walls选择了在外部的propreties文件中增加描述信息, 例如
# The default package
package = com.springinaction.chapter01.knight
knight = com.springinaction.chapter01.knight.KnightOfTheRoundTable
quest = com.springinaction.chapter01.knight.HolyGrailQuest
knight.myQuest=quest

此后可以使用
<beans>
  <knight id="knight" moniker="Bedivere"
      xmlns="http://springinaction.com/schemas/knight">
    <myQuest><quest/></myQuest>
  </knight>
</beans>
myQuest是对quest属性的重命名.

    不过在我看来, 这种依赖外部文件的方法没有什么必要. 我的建议是将spring内置标签与自定义标签同等对待, 因而spring标签也处在某一特定名字空间s中, 这样就可以避免名字冲突.
<beans xmlns:k="java://com.springinaction.chapter01.knight">
  <k:KnightOfTheRoundTable s:id="knight" moniker="Bedivere">
    <quest><k:HolyGrailQuest/></quest>
  </k:KnightOfTheRoundTable>
</beans>

以上例子中s:id所指定的就是spring所需要的id值, s是spring标签所在的名字空间.
     另外, 我认为引入类名简写是没有什么必要的, 因为类名本身就应该能够揭示其用途, 而不需要一个更加富有表现力的名字. 而考虑到spring作为组件装配工厂的用途,  在装配的过程中我们应该拥有对于所装配组件的明确知识, 应该清晰的意识到自己在操纵哪个实现类. 如果我们定义了一个简写名字, 那就是多了一个附加层, 增加了不必要的概念转换负担, 而且模糊了我们对于系统本身的认识.
    我一直坚持xml是人机共享的信道, 应该是人与机器都能够读懂的语言. 本来xml相对于html的进步就在于它并不是规定了一些预定义的标签, 而是仅仅定义了标签的语法, 允许通过自定义标签来描述信息结构. 我们不应该浪费xml的这种描述能力. 虽然spring的功能比较单一, 引入自定义标签的优点可能不是那么明显, 但是在更复杂的环境中, 我们的经验证明这是绝对有益的. 在witrix平台的配置文件中, 我们大量使用了tpl模板技术, 通过tpl的自定义标签机制对外提供一些Domain Specific的功能标签, 大大增强了xml标签的语义表达能力. 例如, 在工作流配置中, 我们可以定义如下标签
     <util:发送邮件通知 接收人="${receiver}" 内容="xx工作已就绪" />
    当标签名或者属性名写错的时候, 在编译期就可以诊断出来并抛出异常, 通过cp:run机制甚至可以在编译期对属性内容的格式进行特殊的校验.
分享到:
评论

相关推荐

    xbean简化spring配置文件.doc

    xbean简化spring配置文件 xbean是 Apache Geronimo 项目的一个子项目,旨在简化Spring配置文件的编写。下面我们来详细介绍如何使用xbean简化Spring配置文件。 在Spring之前,我们使用Factory模式来管理bean。例如...

    Spring依赖包和配置文件

    二、Spring配置文件 1. **beans.xml**:这是Spring应用中最常见的配置文件,用于定义bean及其依赖关系。在这里,我们可以声明bean的类、属性、初始化方法、依赖注入等。 2. **applicationContext.xml**:此文件通常...

    xbean-jar.zip

    此外,XBean-Spring还支持XML Schema,使得配置文件更加规范和可验证,提高了代码的健壮性和可维护性。通过整合XBean-Spring,开发者可以在不修改Spring核心代码的情况下,享受到更多元化的配置方式,为项目带来更高...

    Jaxws+Spring整合实例

    压缩包中的`JaxwsSpring`文件可能包含了整个整合实例的所有源代码和配置文件,包括服务接口、实现类、Spring配置文件、以及运行和测试的相关脚本。通过研究这些文件,可以更深入地理解JAX-WS与Spring的整合过程,并...

    xbean.jar

    XBean提供了一种基于XML Schema的注解方式,使得Java类可以直接与XML配置文件中的元素和属性对应,极大地简化了配置过程。 三、动态类加载 xbean.jar还包含了动态类加载机制,这使得程序在运行时能够加载和解析新...

    xbean,xmlpublic,xml-apis等jar

    这个框架主要用于简化复杂配置文件的处理,尤其是在Spring框架中,XBean可以作为一个扩展,帮助处理XML配置文件。它支持动态加载和更新XML配置,使得应用能够根据配置文件的变化实时做出响应。 2. **XMLPublic**: ...

    java xbean.zip

    XBean是基于Java的XML Bean框架,它允许开发者通过XML配置文件来管理和创建Java对象,这在服务导向架构(SOA)和企业级Java应用中非常常见。 XBean的核心功能在于它的XML解析器和扩展的JavaBeans API,它能够处理...

    webServicesXFIReJAR包

    9. **xbean-spring-2.8.jar**:此JAR文件是XBean与Spring框架的集成,允许XBean解析Spring的XML配置文件,便于在Spring环境中使用XBean的功能。 10. **jdom-1.0.jar**:JDOM是一个用纯Java实现的DOM模型,用于处理...

    ActiveMQ结合Spring收发消息的示例代码

    这通常在一个名为`ActiveMQ.xml`的Spring配置文件中完成。以下是一个简单的配置示例: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    2.2 broker 启动方式1

    - **命令行启动 ActiveMQ**:使用命令 `activemq start xbean:file: D:\ProgramFiles\Study\apache-activemq-5.15.1\conf\activemq-2.xml` 来指定新的配置文件启动 ActiveMQ。 #### 1.2 配置文件详解 以 `activemq...

    activemq-rar-5.3.0.rar

    8. **xbean-spring-3.6.jar**:XBean是一个Spring扩展,允许XML配置的动态加载和解析,常用于加载ActiveMQ的Spring配置文件。 总结来说,这个RAR文件包含了运行和配置ActiveMQ 5.3.0所需的所有组件和依赖。用户可以...

    面向服务的架构用XFIRE配置webService服务;

    3. **配置服务**:使用Spring XML配置文件声明服务,指定接口、实现类以及可能的WS-Security设置。 4. **部署服务**:将服务注册到XFIRE服务器,可以通过Jetty等Servlet容器完成。 5. **测试服务**:使用CXF的客户端...

    xfire开发webservice所需jar包

    8. **xbean-spring-2.8.jar**:Apache XBean是Spring的一个扩展,用于加载XML配置文件,特别是在复杂的XML配置和动态类型转换时很有用。 9. **wsdl4j-1.6.1.jar**:WSDL4J是用于处理WSDL(Web服务描述语言)的Java...

    XFire的jar包

    4. xbean-spring-2.8.jar:这个库是Spring与Apache XBean集成的桥梁,XBean是一个XML处理框架,帮助加载和管理Spring配置文件。 5. jdom-1.0.jar:JDOM是一个用纯Java实现的XML文档对象模型,XFire可能使用它来处理...

    简单的WebService

    - `xbean-2.2.0.jar` 和 `xbean-spring-2.8.jar`:XBean是Apache基金会的一个项目,它提供了加载XML配置文件的能力,尤其是与Spring集成时。 - `wss4j-1.5.1.jar`:Web Services Security for Java (WSS4J) 是...

    java开发常用架包,sturts2,spring,json,druid架包

    1. **Struts2**:Struts2是基于MVC(Model-View-Controller)设计模式的Web应用程序框架,它简化了开发流程,提供了丰富的拦截器(Interceptor)和结果类型(Result Type)。Struts2允许开发者通过Action类处理请求...

    AppFuse(2)

    XBean提供了XML配置支持,可以方便地将Java对象的配置信息存储在XML文件中,并在运行时加载和管理这些对象。 2. **struts2-core-2.0.11.1.jar**:Struts 2是Struts框架的下一代版本,是一个基于MVC设计模式的Web...

    xfirejar.jar包资源

    - `xbean.jar`: Apache XBean是用于配置和管理Java对象的库,常用于加载XML配置文件。 - `xalan.jar`: Xalan是XSLT处理器,用于将XML转换成其他格式,如HTML或PDF。 - `xercesImpl.jar`: Xerces是Apache的XML解析...

    为activemq服务器添加简单验证机制

    这个文件是基于Spring的XML配置,用于定义ActiveMQ Broker的各种属性。在4.0版本之后,ActiveMQ支持xbean配置方式,使得配置更加灵活。 以下是一个示例配置,展示了如何在`activemq.xml`中添加验证: ```xml &lt;!-...

    开发常用jar6

    9. **xbean**:Apache XBean是用于加载XML配置的Java库,它可以将XML配置文件转换为Java对象,是Spring框架的一个分支。 10. **shiro**:Apache Shiro是一个强大的Java安全框架,用于处理认证、授权、加密和会话...

Global site tag (gtag.js) - Google Analytics