spring和spring_Spring WebApplicationInitializer和ApplicationContextInitializer的混淆
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的混淆相关推荐
- Spring WebApplicationInitializer和ApplicationContextInitializer的混淆
我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer,并希望描述它们中的每一个,以便为我自己澄清它们. 我以前在这里写 ...
- Spring中对于WebApplicationInitializer的理解
文章目录 1.前言 2.WebApplicationInitializer的定义 3.实现原理 4.利用SPI我们能做什么? 4.1.定义一个`MyWebAppInitializer` 4.2.定义一 ...
- spring和spring_Spring交易可见性
spring和spring 在初始化应用程序上下文时,Spring在遇到带有@Transactional标记的类时会创建代理. @Transactional可以应用于类级别或方法级别. 在类级别应用它 ...
- spring和spring_Spring MVCGradle
spring和spring In this post, we will develop and test simple Spring MVC Gradle application using Ecli ...
- java spring boot项目运用proguard实现代码混淆
欢迎访问github proguard是一款较为容易使用的java代码混淆工具,不需要其他配置,只需在pom中加入即可使用. 下面是具体pom <build><finalName&g ...
- Spring揭秘--寻找遗失的web.xml
今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础.几乎所有人都是从 servlet,jsp,filter 开始编写自己的第一个 hello world 工程 ...
- Spring Boot 入门与实战笔记
**一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...
- Spring Boot学习笔记-基础(2)
Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...
- Spring Boot框架入门到进阶教程(自学版)
文章目录 前言 一Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.MAVEN设置: 2.IDEA设置 4.Spring Boot HelloWorld 1 ...
最新文章
- vbs文件放在java工程中如何调用_Eclipse软件导入Java工程文件的操作方法。
- 二维码QR Code不是一个产品,是一个功能
- composer update 的时候提示the requested PHP extension pcntl is missing from your system.的方法处理
- 关于迭代測试的一些思考
- MySQL安装之后没有MySQL数据库的原因
- java程序设计_Java程序设计-Object类(笔记)
- 30岁学编程python_我30岁了,转行学编程可以吗? 排除法告诉你答案
- 自己写的Point类
- printFinal用法示例
- golang连接mysql操作示例增删改查
- Windows下SVN备份脚本
- PMP题库重要吗?什么样的题库才是好的题库?
- OA网站不能正常显示(不能看正文)
- 到底什么是前后端分离
- 贵州高考成绩查询时间2021具体时间,贵州高考成绩一般公布时间 2021贵州高考成绩什么时候公布...
- 毕业设计——基于小程序云开发的校园二手交易平台(附源码)
- 信用社计算机专业大纲,信用社计算机专业试题
- U盘中毒后怎么恢复数据
- 虚拟机从路由器获取宽带拨号账号密码
- 每秒处理10万订单乐视集团支付架构