Java Spring:可以有两个上下文—web和;后端?

Java Spring:可以有两个上下文—web和;后端?,java,spring,web-applications,backend,Java,Spring,Web Applications,Backend,我有一个基于spring的web应用程序,它有一个基于spring的后端。目前,集成是以一种愚蠢的方式完成的,即手动将backend.xml复制到web应用程序资源并进行合并 我想知道Spring是否准备好拥有一个bean,它将是另一个ApplicationContext,它是否可以从中获得bean;此外,如果它处理bean名称冲突-例如,如果我可以为“导入的”bean分配一个名称空间 或者-这种情况下的最佳实践是什么 谢谢, 翁德拉。如果我理解正确,这绝对没问题。有些人将数据库上下文与web上

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

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

或者-这种情况下的最佳实践是什么

谢谢,
翁德拉。

如果我理解正确,这绝对没问题。有些人将数据库上下文与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>

上下文配置位置
类路径:someApplicationContext.xml
类路径:someOtherApplicationContext.xml
org.springframework.web.context.ContextLoaderListener

至于bean的冲突——您应该给bean一个唯一的ID。

我总是将我的SpringXML按层划分:web、服务、持久性。它从不只是在一个文件中。我想说,这样做太过分了;这是一个最佳实践。

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

我只在WebApplicationContext中保留特定于web的配置—我的控制器和视图等。任何不特定于web的内容都会进入主ApplicationContext,主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的配置属性的属性占位符,而主应用程序上下文具有不同的属性占位符,在所有导入之前,我通常会在顶层文件中定义它。

您只是使用它吗?类加载器会有问题吗?类加载器没有问题。我不导入——只要告诉应用程序上下文在启动时读取与应用程序关联的所有XML配置。