我有一些项目都使用一个项目用于数据模型。这些项目中的每一个都有自己的applicationContext.xml文件,其中包含大量重复数据内容。
我想要一个modelContext.xml文件,另一个用于我的ui.xml等。
我可以这样做吗?
答案 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和命令行版本)绑定不同的应用程序。