我可以从较小的组件编写Spring配置文件吗?

时间:2008-09-18 17:10:38

标签: java spring

我有一些项目都使用一个项目用于数据模型。这些项目中的每一个都有自己的applicationContext.xml文件,其中包含大量重复数据内容。

我想要一个modelContext.xml文件,另一个用于我的ui.xml等。

我可以这样做吗?

7 个答案:

答案 0 :(得分:19)

来自Spring Docs (v 2.5.5 Section 3.2.2.1.)

  

分手通常很有用   容器定义分为多个   XML文件。然后加载一种方法   应用程序上下文   从所有这些XML配置   片段是使用该应用程序   需要的上下文构造函数   多个资源位置。有了   bean工厂,一个bean定义读者   可以多次使用来阅读   每个文件的定义依次。

     

一般来说,Spring团队更喜欢   以上方法,因为它保持   容器配置文件不知道   他们正在存在的事实   与他人合并。另类   方法是使用一个或多个   元素的出现   从另一个加载bean定义   文件(或文件)。我们来看看   样品:

     

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
     

     

在此示例中,外部bean   定义从3加载   files,services.xml,   messageSource.xml,和   themeSource.xml来。所有位置路径   被认为是相对的   定义文件进行导入,   所以这种情况下的services.xml必须是   在同一目录或类路径中   作为文件的位置   导入,而messageSource.xml和   themeSource.xml必须位于资源中   位置下方的位置   导入文件。如你所见,a   实际上忽略了前导斜线,但是   鉴于这些被考虑   相对路径,它可能更好   形式根本不使用斜线。该   正在导入的文件的内容   必须是有效的XML bean定义   根据Spring Schema的文件   或DTD,包括顶级    元件。

答案 1 :(得分:3)

我们在我们的工作项目中使用Spring中的classpath *资源加载器。对于某个应用,将加载包含应用程序ID的所有appcontext文件:

classpath*:springconfig/spring-appname-*.xml

答案 2 :(得分:2)

是的,您可以通过导入元素执行此操作。

<import resource="services.xml"/>

每个元素的资源属性都是有效路径(例如classpath:foo.xml)

答案 3 :(得分:2)

鉴于尼古拉斯指出的我在文档中发现了这一点。它允许我在运行时选择我感兴趣的bean上下文。

GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();

答案 4 :(得分:1)

这是我为我的一个项目所做的。在web.xml文件中,您可以定义希望应用程序使用的Spring bean文件:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/applicationContext.xml
      /WEB-INF/modelContext.xml
      /WEB-INF/ui.xml
    </param-value>
  </context-param>

如果web.xml未定义,则会自动查找/WEB-INF/applicationContext.xml

答案 5 :(得分:0)

另外需要注意的是,虽然你可以这样做,但如果你不是XML的忠实粉丝,你可以在Spring 2.5中用注释做很多事情。

答案 6 :(得分:0)

是的,您可以使用“Master”bean文件中的标记。但是为什么呢?为什么不将文件列在bean工厂的wab.xml或als locations数组的contextConfigLocation上下文参数中?

我认为mutliple文件更容易处理。您可以只选择其中一些进行测试,只需添加重命名或删除应用程序的一部分,您可以使用相同的配置文件(具有一些重叠bean定义的webapp和命令行版本)绑定不同的应用程序。