applicationContext 是如何加载的?
How applicationContext was loaded?
web.xml的内容
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/krams/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
WEB.INF
中也有一个 applicationContext.xml
文件,但 web.xml
中没有。它是如何加载的?
ContextLoaderListerner, ContextLoader and XmlWebApplicationContext类负责加载applicationContext.xml。
请在 git 上查看他们的源代码。
你会发现ContextLoaderListerner is extending ContexLoader。
在 ContextLoader 文档中,他们提到:
* If not explicitly specified, the context implementation is supposed to use a
* default location (with XmlWebApplicationContext: "/WEB-INF/applicationContext.xml").
并且这个值在XmlWebApplicationContext中提到如下(如果你需要的话,还有其他常量值):
/** Default config location for the root context */
public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
/** Default prefix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB-INF/";
/** Default suffix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";
这就是 applicationContext.xml 文件虽然未在 web.xml 文件中配置但仍被加载的原因。您将需要一些时间来理解 Spring.
使用的所有这些默认配置(魔法)
web.xml的内容
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/krams/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
WEB.INF
中也有一个 applicationContext.xml
文件,但 web.xml
中没有。它是如何加载的?
ContextLoaderListerner, ContextLoader and XmlWebApplicationContext类负责加载applicationContext.xml。
请在 git 上查看他们的源代码。
你会发现ContextLoaderListerner is extending ContexLoader。
在 ContextLoader 文档中,他们提到:
* If not explicitly specified, the context implementation is supposed to use a
* default location (with XmlWebApplicationContext: "/WEB-INF/applicationContext.xml").
并且这个值在XmlWebApplicationContext中提到如下(如果你需要的话,还有其他常量值):
/** Default config location for the root context */
public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
/** Default prefix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB-INF/";
/** Default suffix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";
这就是 applicationContext.xml 文件虽然未在 web.xml 文件中配置但仍被加载的原因。您将需要一些时间来理解 Spring.
使用的所有这些默认配置(魔法)