3

我有一个基于 spring 的 web 应用程序和基于 spring 的后端。目前,集成是以手动将后端 .xml 复制到 Web 应用程序资源并合并的愚蠢方式完成的。

我想知道 Spring 是否准备好拥有另一个 bean ApplicationContext,以及它是否可以从中获取 bean;如果它处理 bean 名称冲突 - 例如,如果我可以将命名空间分配给“导入的”bean。

或者 - 这种情况下的最佳做法是什么?

谢谢,昂德拉。

4

3 回答 3

2

我总是按层拆分我的 Spring XML:Web、服务、持久性。它永远不会只在一个文件中。我会说这样做是不可能的。这是一个最佳实践。

于 2010-06-21T01:20:14.800 回答
2

默认情况下,您应该已经有两个上下文。以您的 servlet ( [servlet-name]-context.xml ) 命名的上下文是 WebApplicationContext 并且是主 ApplicationContext 的子上下文,它是从 contextConfigLocation 中列出的文件创建并由 ContextLoaderListener 加载的。子级可以访问父级中定义的任何 bean,但父级无法访问子级中定义的 bean,因此在开始移动 bean 之前请记住这一点。

我只在 WebApplicationContext 中保留特定于 Web 的配置——我的控制器和视图等。任何不特定于 Web 的内容都会进入主 ApplicationContext,它本身始终是一个文件,它只导入许多其他应用程序上下文 xml 文件,按照其他人的建议,按层分解。

<import resource="classpath:dao-context.xml" />
<import resource="classpath:service-context.xml" />
<import resource="security-context.xml" />

请注意,spring 只允许在每个应用程序上下文中使用一个属性占位符元素,但您也可以在每个子应用程序上下文中拥有一个,所以我的 [servlet-name]-context.xml 文件总是有一个带有 web- 的属性占位符特定的配置属性和主应用程序上下文有一个不同的,我通常在顶层文件中定义,在所有导入之前。

于 2010-06-21T11:38:27.997 回答
1

如果我对您的理解正确,那肯定没问题。有些人将他们的数据库上下文与他们的 Web 上下文分开。您的 web.xml 中的以下示例:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:someApplicationContext.xml
        classpath:someOtherApplicationContext.xml
    </param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

至于豆子的碰撞 - 你应该给豆子一个唯一的ID。

于 2010-06-21T01:01:04.500 回答