spring和spring

我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer,并希望描述它们中的每一个,以便为我自己澄清它们。

我以前曾在这里写过有关WebApplicationInitializer的博客。 它仅在符合Servlet 3.0+规范的Servlet容器中相关,并提供了一个钩子以编程方式配置Servlet上下文。 这有何帮助?您可以拥有一个可能没有任何web.xml文件的Web应用程序,该文件通常在基于Spring的Web应用程序中用于描述根应用程序上下文以及称为DispatcherServlet的Spring Web前端控制器。 以下是使用WebApplicationInitializer的示例:

public class CustomWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootConfiguration.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[]{MvcConfiguration.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}

现在,什么是ApplicationContextInitializer 。 本质上是在完全创建Spring应用程序上下文之前执行的代码。 使用ApplicationContextInitializer的一个好用例是按照以下方式以编程方式设置Spring环境配置文件:

public class DemoApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {@Overridepublic void initialize(ConfigurableApplicationContext ac) {ConfigurableEnvironment appEnvironment = ac.getEnvironment();appEnvironment.addActiveProfile("demo");}
}

如果您有一个基于Spring-Boot的应用程序,那么注册ApplicationContextInitializer非常简单:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class SampleWebApplication {public static void main(String[] args) {new SpringApplicationBuilder(SampleWebApplication.class).initializers(new DemoApplicationContextInitializer()).run(args);}
}

但是,对于非Spring-Boot Spring应用程序而言,它有些棘手,如果它是web.xml的程序化配置,则该配置遵循以下原则:

public class CustomWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext container) {AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();rootContext.register(RootConfiguration.class);ContextLoaderListener contextLoaderListener = new ContextLoaderListener(rootContext);container.addListener(contextLoaderListener);container.setInitParameter("contextInitializerClasses", "mvctest.web.DemoApplicationContextInitializer");AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();webContext.register(MvcConfiguration.class);DispatcherServlet dispatcherServlet = new DispatcherServlet(webContext);ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", dispatcherServlet);dispatcher.addMapping("/");}
}

如果它是正常的web.xml配置,则可以通过以下方式指定初始化程序:

<context-param><param-name>contextInitializerClasses</param-name><param-value>com.myapp.spring.SpringContextProfileInit</param-value>
</context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

综上所述,除了Initializer后缀之外,WebApplicationInitializer和ApplicationContextInitializer都具有完全不同的目的。 Servlet容器在Web应用程序启动时使用WebApplicationInitializer并提供了一种以编程方式创建Web应用程序的方法(替换web.xml文件),而ApplicationContextInitializer提供了一个钩子,用于在完全创建Spring应用程序上下文之前对其进行配置。

翻译自: https://www.javacodegeeks.com/2014/10/spring-webapplicationinitializer-and-applicationcontextinitializer-confusion.html

spring和spring

spring和spring_Spring WebApplicationInitializer和ApplicationContextInitializer的混淆相关推荐

  1. Spring WebApplicationInitializer和ApplicationContextInitializer的混淆

    我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer,并希望描述它们中的每一个,以便为我自己澄清它们. 我以前在这里写 ...

  2. Spring中对于WebApplicationInitializer的理解

    文章目录 1.前言 2.WebApplicationInitializer的定义 3.实现原理 4.利用SPI我们能做什么? 4.1.定义一个`MyWebAppInitializer` 4.2.定义一 ...

  3. spring和spring_Spring交易可见性

    spring和spring 在初始化应用程序上下文时,Spring在遇到带有@Transactional标记的类时会创建代理. @Transactional可以应用于类级别或方法级别. 在类级别应用它 ...

  4. spring和spring_Spring MVCGradle

    spring和spring In this post, we will develop and test simple Spring MVC Gradle application using Ecli ...

  5. java spring boot项目运用proguard实现代码混淆

    欢迎访问github proguard是一款较为容易使用的java代码混淆工具,不需要其他配置,只需在pom中加入即可使用. 下面是具体pom <build><finalName&g ...

  6. Spring揭秘--寻找遗失的web.xml

    今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础.几乎所有人都是从 servlet,jsp,filter 开始编写自己的第一个 hello world 工程 ...

  7. Spring Boot 入门与实战笔记

    **一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...

  8. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  9. Spring Boot框架入门到进阶教程(自学版)

    文章目录 前言 一Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.MAVEN设置: 2.IDEA设置 4.Spring Boot HelloWorld 1 ...

最新文章

  1. vbs文件放在java工程中如何调用_Eclipse软件导入Java工程文件的操作方法。
  2. 二维码QR Code不是一个产品,是一个功能
  3. composer update 的时候提示the requested PHP extension pcntl is missing from your system.的方法处理
  4. 关于迭代測试的一些思考
  5. MySQL安装之后没有MySQL数据库的原因
  6. java程序设计_Java程序设计-Object类(笔记)
  7. 30岁学编程python_我30岁了,转行学编程可以吗? 排除法告诉你答案
  8. 自己写的Point类
  9. printFinal用法示例
  10. golang连接mysql操作示例增删改查
  11. Windows下SVN备份脚本
  12. PMP题库重要吗?什么样的题库才是好的题库?
  13. OA网站不能正常显示(不能看正文)
  14. 到底什么是前后端分离
  15. 贵州高考成绩查询时间2021具体时间,贵州高考成绩一般公布时间 2021贵州高考成绩什么时候公布...
  16. 毕业设计——基于小程序云开发的校园二手交易平台(附源码)
  17. 信用社计算机专业大纲,信用社计算机专业试题
  18. U盘中毒后怎么恢复数据
  19. 虚拟机从路由器获取宽带拨号账号密码
  20. 每秒处理10万订单乐视集团支付架构

热门文章

  1. 欢乐纪中某B组赛【2019.1.28】
  2. ssl2863-石子合并【dp练习】
  3. I. Space Station(hash记忆化+dp)
  4. ARC107——D - Number of Multisets
  5. 超详细的 Redis Cluster 官方集群搭建指南
  6. Mybatis简介与原理
  7. Oracle入门(十四.14)之处理异常
  8. Oracle入门(十三C)之高级查询(下)
  9. 漫画:什么是字典序算法
  10. (九)Spring 事务开发、事务属性详解