Java Spring:需要contextConfigLocation吗?
在Java Spring:需要contextConfigLocation吗?,java,spring,spring-mvc,jakarta-ee,Java,Spring,Spring Mvc,Jakarta Ee,在web.xml中,我们设置了名为contextConfigLocation的上下文参数,定义如下代码所示: <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/root-context.xml</param-value> </context-param> 上下文配置位置 /WEB-INF
web.xml
中,我们设置了名为contextConfigLocation
的上下文参数,定义如下代码所示:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
上下文配置位置
/WEB-INF/root-context.xml
在Dispatch Servlet中也设置了相同的参数,如下所示
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
春天
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/servlet-context.xml
1.
这两个
contextConfigLocation
s之间有什么区别?第一个设置适用于全局,而第二个设置是私有的,并且是“spring”servlet独有的。有两种类型的上下文:
根上下文(超级)
自有(子)servlet上下文(子)
作为通用应用程序上下文,web应用程序上下文是分层的。每个应用程序都有一个根上下文,而应用程序中的每个servlet(包括MVC框架中的dispatcher servlet)都有自己的子上下文。- 当我们启动 Web容器或服务器
- 它通常有DAOImpl、Service、Singleton和Datasource 助手对象等,这些对象我们希望在手之前准备好,以便可以使用
- init param中的contextConfigLocation仅特定于该DispatcherServlet,并在Servlet启动时加载,该Servlet可能会延迟加载,即在第一次调用Servlet时加载,前提是启动时加载对于该Servlet不是正值
- 这意味着,这里定义的bean可能会在以后创建。它通常包含控制器bean等
- 上下文参数ContextXml中定义的bean对定义的bean可见 在init param ContextXml中
- 但是init param中定义的bean对context param不可见 上下文bean
- 因此,@Controller Bean通常在ChildApplicationContext中定义,而@Service是RootApplicationContext的一部分
- 这意味着@Controller不能注入@Service中 而我们可以轻松地在@Controller中注入@servicebean
所以基本上我们通过 不同的上下文配置文件
你可以看看这个帖子:谢谢!解释得很好。