gpt4 book ai didi

spring - 何时使用 AbstractAnnotationConfigDispatcherServletInitializer 和 WebApplicationInitializer?

转载 作者:IT老高 更新时间:2023-10-28 13:04:06 24 4
gpt4 key购买 nike

我正在使用 Spring 4.0.7

我做了一个关于通过 JavaConfig 配置 Spring MVC 的研究。

实际上直到昨天我才看到使用这两个选项的两种配置

  1. 扩展 AbstractAnnotationConfigDispatcherServletInitializer
  2. 扩展 WebMvcConfigurerAdapter 实现 WebApplicationInitializer

注意:(2)是两个类,一个用于扩展,另一个用于实现

我使用 (2) 是因为我发现了很多示例,我可以在其中配置转换器、格式化程序、资源处理程序等……

但最近几天我试图帮助解决有关 StackOverflow 的问题,我确实意识到 (1) 存在。我在 Google 上对 (1) 做了一些概述,并存在一些与 (1) 一起使用的示例

我的问题是这篇文章的标题是如何描述的。

谢谢

最佳答案

随着 Servlet 3.0 规范的发布,可以使用(几乎)没有 xml 来配置您的 Servlet 容器。为此,有 ServletContainerInitializer 在 Servlet 规范中。在这个类中,您可以像在 web.xml 中那样注册过滤器、监听器、servlet 等。

Spring 提供了一个实现 SpringServletContainerInitializer谁知道如何处理WebApplicationInitializer类。 Spring 还提供了几个基类来扩展以使您的生活更轻松,AbstractAnnotationConfigDispatcherServletInitializer 就是其中之一。它注册ContextLoaderlistener(可选)和提供 servlet 映射。

WebMvcConfigurerAdapter用于配置Spring MVC,替换DispatcherServlet加载的xml文件用于配置Spring MVC。 WebMvcConfigurerAdapter 应该用于 @Configuration 类。

@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
{ ... }

我不建议将它们混合在一起,因为它们基本上是两个不同的问题。第一个用于配置servlet容器,后者用于配置Spring MVC。

您可能希望将它们分成 2 个类。

用于配置。

@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter { ... }

用于引导应用程序。

public class MyWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer
{

protected Class<?>[] getRootConfigClasses() {
return new Class[] {RootConfig.class};
}

protected Class<?>[] getServletConfigClasses() {
return new Class[] {WebConfiguration .class};
}

protected String[] getServletMappings() {
return new String[] {"/"};
}

}

另一个优点是您现在可以使用 Spring 提供的便利类,而不是手动配置 DispatcherServlet 和/或 ContextLoaderListener

关于spring - 何时使用 AbstractAnnotationConfigDispatcherServletInitializer 和 WebApplicationInitializer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676782/

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