Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:需要contextConfigLocation吗?_Java_Spring_Spring Mvc_Jakarta Ee - Fatal编程技术网

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

所以基本上我们通过 不同的上下文配置文件


你可以看看这个帖子:谢谢!解释得很好。