有什么不同?在context-param中使用import指定文件?

时间:2013-04-08 17:16:58

标签: xml spring import applicationcontext

Spring和Hibernate堆栈。

我发现我们可以在web.xml标记下的<context-param>文件中指定多个文件。

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appcontext.xml, hibernateconfig.xml</param-value>
</context-param>

我们也可以从appcontext.xml文件加载配置文件:

appcontext.xml:

<import resource="hibernateconfig.xml"/>

有什么区别或两者完全不同?

谢谢!

2 个答案:

答案 0 :(得分:3)

除了灵活性之外,我在之前的项目中注意到的一个主要差异是,如果您的上下文文件彼此依赖,那么它可能会导致问题。假设您在appcontext.xml文件中导入了一些DAO类的bean定义,而这又依赖于hibernateconfig.xml。如果你给这样的条目

<param-value>/WEB-INF/appcontext.xml, hibernateconfig.xml</param-value>
在web.xml中,然后将DAO bean加载出注入其中的sessionFactory(来自hibernateconfig)。这有时会导致HibernateExceptions。在这种情况下,您可以在dao上下文导入之前导入appContext.xml中的hibernateconfig.xml,如下所示:

appcontext.xml:

<import resource="hibernateconfig.xml"/>
<import resource="dao-config.xml"/>

这将确保在dao配置之前加载hibernate配置。

答案 1 :(得分:1)

这是为了灵活性。

如果您需要使用多个弹簧配置文件,而您没有控制它们,您会怎么做?

  1. 在您的web.xml中,您可以像在第一个示例中那样指定这两个文件,因为您无法将import元素添加到其中任何一个文件中。
  2. 您可以创建import同时编辑这两个文件的新文件。
  3. 任何一个都可以工作,因为灵活性是Spring努力的目标。

    供参考,以下是每个部分的一些文档: import elementcontextConfigLocation

    虽然它们都用于完全相同的东西,但似乎contextConfigLocation支持Ant样式模式匹配,而import元素可能不支持。