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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis mysql demo_SpringBoot(入门Demo,整合mybatis,连接mysql)

1.简介SpringBoot提供一种固定的、约定优于配置风格的框架&#xff0c;使开发者更快地创建基于spring的应用和程序。可以高效的创建基于Spring的应用服务(SpringBoot不是对spring功能的增强&#xff0c;而是可以更快速使用spring)。为微服务spring cloud铺路&#xff0c;可整合…

HttpClient 4 API –获取状态码-getStatusLine()。getStatusCode()示例

在HttpClient API中获取状态代码的快速指南。 getStatusLine&#xff08;&#xff09;。getStatusCode&#xff08;&#xff09;示例和相关的错误。 1.简介 在这个非常快速的教程中&#xff0c;我将展示如何使用HttpClient 4获取和验证HTTP响应的StatusCode。 2. Maven依赖 要…

css table嵌套内部table不受外部影响_HTML+CSS网页一揽子(4)

CSS重要属性之浮动基本属性&#xff1a;float:left&#xff1b;左浮动float:right&#xff1b;右浮动float:none&#xff1b;不浮动(一般应用于覆盖既有浮动属性时使用)clear:both&#xff1b;清除浮动对其他元素带来的影响应用场景&#xff1a;(1)网站大的结构布局&#xff1a…

ejb构建_如何使用单例EJB和MBean构建和清除参考数据缓存

ejb构建在我的一个项目中&#xff0c;我需要使用EclipseLink作为ORM框架从Java EE 6 WebLogic环境中的多个源中加载参考数据。 由于我在Java EE世界中找不到与Spring YET的Cacheable相当的注释&#xff0c;因此我不得不编写自己的缓存解决方案。 尽管参考数据几乎不会随时间变化…

mysql ticks_【原创】C# 计时周期数(Ticks)在不同数据库上的实现

动手之前&#xff0c;先来看看 Ticks 在微软官方文档上的定义&#xff1a;注解一个计时周期表示一百纳秒&#xff0c;即一千万分之一秒。1 毫秒内有 10,000 个计时周期&#xff0c;即 1 秒内有 1,000万个计时周期。此属性的值表示自0001年1月1日午夜12:00:00 0:00:00 (公历日期…

在Spring Boot测试中使用Testcontainer进行数据库集成测试

在此博客文章中&#xff0c;我想演示如何在Spring Boot测试中集成Testcontainer以便与数据库一起运行集成测试。 我没有使用Testcontainers的Spring Boot模块。 如何与他们合作&#xff0c;我将在另一篇博客文章中进行介绍。 所有示例都可以在GitHub上找到 。 为什么要使用测试…

php模块安装 pdo_mysql_关于php插件pdo_mysql的安装

今天在做一个商城的连接的时候&#xff0c;需要MpDO验证。需要安装pdo_mysql模块&#xff0c;刚开始按照php扩展模块的安装按照这个安装ZIP,curl都成功了但是安装pdo_mysql却不行&#xff0c;在./configure --with-php-config/usr/local/php/bin/php-config是出现错误。如下che…

java8串行和并行的区别_垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)...

java8串行和并行的区别4个Java垃圾收集器–错误的选择如何严重影响性能 在2014年&#xff0c;对于大多数开发人员来说&#xff0c;还有两件事仍然是个谜&#xff1a;垃圾收集和了解异性。 由于我对后者知之甚少&#xff0c;所以我认为我会对前者大吃一惊&#xff0c;尤其是因为…

python函数参数学习_python学习笔记-11.函数参数和返回值进阶

1. 函数参数和返回值的作用函数根据有没有参数以及有没有返回值&#xff0c;可以相互组合&#xff0c;共有4种形式&#xff1a;无参数&#xff0c;无返回值无参数&#xff0c;有返回值有参数&#xff0c;无返回值有参数&#xff0c;有返回值定义函数时&#xff0c;是否接收参数…

java spr_Java中的42行代码中的URL缩短器服务(Java(?!)Spring Boot + Redis

java spr显然&#xff0c;编写URL缩短服务是新的“ Hello&#xff0c;world&#xff01; ”在IoT /微服务/时代的世界中。 一切始于在45行Scala中的URL缩短服务 -整洁的Scala&#xff0c;以Spray和Redis进行调味以进行存储。 紧随其后的是&#xff0c; 在35行Clojure中提供了ur…

python邮件发送哪个好_python发邮件(一)

复习模块如果我们要发送邮件&#xff0c;就需要用到smtplib模块的以下方法&#xff1a;1、import smtplib #引入smtplib模块2、server smtplib.SMTP() #server为变量&#xff0c;通过SMTP指定一个服务器&#xff0c;这样才能把邮件送到另一个服务器&#xff0c;SMTP…

SSL Kafka经纪人从Kafka Mirror Maker迁移到Brooklin的挑战

问题 从卡夫卡镜子制造商转移到布鲁克林有我在这里所写的优势。 但是&#xff0c;进行这种迁移并不容易&#xff0c;因为它本来应该如此。 我面临的主要挑战是&#xff1a;在消费者Kafka经纪人和Brooklin之间建立SSL连接 解 SSL问题 事实证明&#xff0c;这个问题比我预期的要…

mysql移动数据的语句是_mysql基本语句

MySQL关系型数据库RDS中的老大哥&#xff0c;增删改查是MySQL入门的基础增删改查语句增删改查的语句命令为增&#xff1a;insert删&#xff1a;delete改&#xff1a;update查&#xff1a;SELECT或者show库操作创建数据库&#xff1a;create database shujukuba;创建带字符集的数…

jetty嵌入式容器_嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务

jetty嵌入式容器最近&#xff0c;我遇到了一个非常有趣的问题&#xff0c;我认为这只需要几分钟就可以解决&#xff1a;在Linux中使用Spring Security &#xff08;当前稳定版本3.2.5 &#xff09;保护Apache CXF &#xff08;当前版本3.0.1 &#xff09;/ JAX-RS REST服务。在…

python逻辑运算符的使用_总结Python中逻辑运算符的使用

下表列出了所有python语言支持的逻辑运算符。假设变量a持有10和变量b持有20&#xff0c;则&#xff1a;示例:试试下面的例子就明白了所有的python编程语言提供了逻辑运算符&#xff1a;#!/usr/bin/pythona 10b 20c 0if ( a and b ):print "line 1 - a and b are true&q…

如何使用用户数据脚本在EC2实例上安装Apache Web Server

你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server。 在我以前的教程之一中&#xff0c;我已经解释了如何使用AWS控制台启动EC2实例。如果您还没有完成该操作&#xff0c;我建议您先进行一下操作。 首先&#xf…

java 常量接口_java接口定义常量研究

背景和同事讨论到&#xff0c;在接口中定义常量的问题&#xff0c;引发了争论&#xff0c;即&#xff0c;假如在接口中定义变量&#xff0c;是否需要用static来限定的问题&#xff0c;或者说用static和不用static会有什么区别。引论package spring.interfaceTest;public interf…

spring 多租户_使用Spring Security的多租户应用程序的无状态会话

spring 多租户从前&#xff0c; 我发表了一篇文章&#xff0c;解释了构建无状态会话的原理 。 巧合的是&#xff0c;我们再次为多租户应用程序执行同一任务。 这次&#xff0c;我们将解决方案集成到Spring Security框架中&#xff0c;而不是自己构建身份验证机制。 本文将解释…

java api 1.6 下载_Java JDK API

JDKJavaDevelopmentKit是SunMicrosystems针对Java开发员的产品。自从Java推出以来&#xff0c;JDK已经成为使用最广泛的JavaSDK。JDK是整个Java的核心&#xff0c;包括了Java运行环境。相关软件软件大小版本说明下载地址jdk(Java Development Kit)是Sun Microsystems针对java开…

Java / Cloud:如何快速创建支持Kubernetes的REST微服务

可以肯定地说&#xff0c;如今微服务与云的结合风靡一时。 微服务的开发比以往任何时候都多&#xff0c;从而导致应用程序部署数量增加。 在过去的十年中&#xff0c;开发了诸如Docker和Kubernetes之类的容器化和编排工具&#xff0c;从而使微服务模式真正易于采用。 本文将教…