gpt4 book ai didi

java - AbstractAnnotationConfigDispatcherServletInitializer 中 getRootConfigClasses() 和 getServletConfigClasses() 之间的区别

转载 作者:行者123 更新时间:2023-11-29 04:08:37 24 4
gpt4 key购买 nike

每个函数的目的是什么。为什么spring给配置类赋予了两种不同的功能?我对两者感到困惑,我应该使用哪一个?

最佳答案

在典型的 Spring 应用程序中,有 2 ApplicationContext例如,第一个是所谓的应用程序上下文,第二个(或第三个或...)是servlet应用程序上下文。

root 应用程序通常包含共享/通用资源,例如 DataSource 、服务、存储库等... servlet 上下文包含特定于该上下文的 bean,通常是 View 解析器、处理程序映射、 Controller 等。The servlet context uses the root context as a parent因此可以看到其中定义的 bean(根不知道 servlet 上下文!)。

在此典型设置中,根上下文由 ContextLoaderListener 加载。和 servlet 上下文 DispatcherServlet

在过去,人们会写一个 web.xml其中将包含 servlet-listener对于ContextLoaderListener和一个 servlet DispatcherServlet 的元素。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"
>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring child -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

ContextLoaderListener将加载applicationContext.xml默认情况下和 DispatcherServlet一个<servlet-name>-servlet.xml (因此是 dispatcher-servlet.xml )。

从 Servlet 3.0 规范开始,可以替换 web.xml具有基于 Java 的配置。 Spring 花时间提供了已经完成基本配置的基类(例如 ContextLoaderListenerDispatcherServlet 的注册)。然而,由于它现在完全基于 Java 的配置,ContextLoaderListenerDispatcherServlet需要提供配置类列表,因为它没有可以检测到加载的默认类名。

所以getRootConfigClasses()将配置ContextLoaderListener实际上是可选的(您可以返回 null 或空数组)。 getServletConfigClasses()将配置DispatcherServlet (并且是必需的)。

关于java - AbstractAnnotationConfigDispatcherServletInitializer 中 getRootConfigClasses() 和 getServletConfigClasses() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com