Spring无法在servlet-context和contextConfigLocation bean之间看到bean

mog*_*lol 6 java spring spring-mvc java-ee spring-bean

我有一个spring mvc项目设置如下:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-contexts/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-contexts/configuration-context.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-contexts/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-contexts/configuration-context.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

如果我在configuration-context.xml中创建一个bean并在servlet-context.xml中引用一个bean,它就无法找到它.这些是作为两个不同的背景创建的吗?为什么这种情况会发生/一般这样?

Ral*_*lph 6

是的,有两个上下文相互堆叠(父和子上下文).

DispatcherServlet(servlet-context.xml)中的bean可以从ContextLoaderListener(configuration-context.xml)访问bean ,但不能反过来.

所以把基本的东西放在configuration-context.xml和网络相关的内容中servlet-context.xml.

@See也是这个Stack Overflow问题:ContextLoaderListener与否?