spring初始化web_了解Spring Web初始化
spring初始化web
几年前,我们大多数人习惯到处编写XML配置文件,甚至可以设置简单的Java EE应用程序。 如今,使用Java或Groovy来配置项目已成为首选方式–您只需要看一下Spring框架的其他版本中引入的Gradle或功能,就可以对此进行总结。
现在,我将为Web应用程序配置Spring上下文。
Java EE提供了ServletContainerInitializer接口,该接口允许在Web应用程序启动时通知库。 从Spring 3.1开始,我们有了SpringServletContainerInitializer类,该类通过实例化实现此接口的所有找到的类来处理WebApplicationInitializer ,并根据@Order注释对它们进行排序(未注释的类获得最高的顺序,因此它们将在最后处理)并调用onStartup()方法。
从3.2版开始的Spring给我们提供了一些实现WebApplicationInitializer接口的类,首先是AbstractContextLoaderInitializer 。 spring-web模块中包含的此类使用抽象的createRootApplicationContext()方法创建应用程序上下文,并将其委托给ContextLoaderListener ,然后将其注册到ServletContext实例中。 使用此类创建应用程序上下文如下所示:
public class SpringAnnotationWebInitializerextends AbstractContextLoaderInitializer {@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringAnnotationConfig.class);return applicationContext;}}
这是启动Spring Web上下文的最简单方法。 但是,如果我们想体验Spring MVC提供的好处,并且不想手动注册DispatcherServlet ,最好使用另一个类: AbstractDispatcherServletInitializer 。 它扩展了上一类,并添加了两个抽象方法: createServletApplicationContext()和getServletMappings() 。 第一个方法返回将传递给DispatcherServlet的WebApplicationContext ,它将自动添加到容器ServletContext中。 请注意,此上下文将被建立为createRootApplicationContext()方法返回的上下文的子级。 第二种方法-您可能已经推论出了-返回在servlet注册期间使用的映射。 如果需要任何自定义过滤器,则还可以重写getServletFilters()方法,因为默认实现只返回空数组。 使用此类的示例性实现可以是:
public class SpringWebMvcInitializerextends AbstractDispatcherServletInitializer {@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringRootConfig.class);return applicationContext;}@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext applicationContext =new AnnotationConfigWebApplicationContext();applicationContext.register(SpringMvcConfig.class);return applicationContext;}@Overrideprotected String[] getServletMappings() {return new String[]{"/*"};}}
现在最后但绝对不是最不重要的一类: AbstractAnnotationConfigDispatcherServletInitializer 。 在这里,我们可以看到简化Spring初始化的进一步步骤-我们不需要手动创建上下文,而只需在getRootConfigClasses()和getServletConfigClasses()方法中设置适当的配置类。 我希望您已经熟悉这些名称,因为它们的工作方式与前一种情况完全相同。 当然,由于此类扩展了AbstractDispatcherServletInitializer,我们仍然可以重写getServletFilters() 。 最后,我们可以通过以下方式实现我们的配置:
public class SpringWebMvcSimpleInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[] {SpringRootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[] {SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/*"};}}
- 如果您想看到更广泛的上下文,请遵循我的GitHub存储库中的示例: https : //github.com/jkubrynski/spring-java-config-samples/
翻译自: https://www.javacodegeeks.com/2014/01/understanding-spring-web-initialization.html
spring初始化web
spring初始化web_了解Spring Web初始化相关推荐
- 了解Spring Web初始化
几年前,我们大多数人习惯到处编写XML配置文件,甚至可以设置简单的Java EE应用程序. 如今,使用Java或Groovy来配置项目已成为一种首选方式–您只需要看一下Spring框架的其他版本中引入 ...
- 【Spring】DispatcherServlet的启动和初始化
使用过SpringMVC的都知道DispatcherServlet,下面介绍下该Servlet的启动与初始化.作为Servlet,DispatcherServlet的启动与Serlvet的启动过程是相 ...
- Spring IoC(二)IoC容器的初始化过程
(一)IoC 容器初始化过程概述 1.1简要概述初始化过程 IoC 容器的初始化过程是通过refresh() 方法来启动的,这个方法标识着IoC 容器正式启动.具体来说,这个启动过程包括:BeanDe ...
- 如何使用Spring初始化程序创建Spring Boot项目
你好朋友, 如果您以前使用过Spring框架,则必须意识到,即使要开始使用基本的Spring功能也需要付出一些真正的努力.有了Spring Boot,最初的麻烦就消失了,您可以在数分钟内开始使用. 欢 ...
- 分析Spring容器启动流程 Spring初始化
分析Spring容器启动流程 Spring初始化 每当启动Web容器时(例如Tomcat),会读取Web应用中的web.xml文件.以下这段代码就是启动Spring容器的关键代码. ContextLo ...
- Spring IoC容器初始化源码(1)—容器初始化入口以及setConfigLocations设置容器配置信息【一万字】
基于最新Spring 5.x,对于基于XML的Spring IoC容器初始化过程中的setConfigLocations设置容器配置信息方法的源码进行了详细分析,最后给出了比较详细的方法调用时序图 ...
- 【Spring 5】响应式Web框架实战(下)
- [Spring 5]响应式Web框架前瞻 - 响应式编程总览 - [Spring 5]响应式Web框架实战(上) 1 回顾 上篇介绍了如何使用Spring MVC注解实现一个响应式Web应用( ...
- Spring Boot(3) Web开发(1)静态资源处理
Spring Boot(3) Web开发(1)静态资源处理 基于spring boot 2.4.3版本 1.静态资源访问 1.1 静态资源目录 把静态资源放在类路径下的以下目录:/static; /p ...
- Building a Restful Web Service(最好的Spring入门教程 --来自Spring官网的Guides)
搭建一个Restful Web服务 本文档将引导你用Spring搭建一个"Hello,World!"Restful Web服务. 你要搭建的是什么? 你将搭建一个Web服务,这个服 ...
最新文章
- rails应用ajax之二:使用rails自身支持
- 鸡蛋该放在哪些篮子里?多少合适?
- POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
- 国庆七天乐 Day5
- 既然选择了远方 便只顾风雨兼程
- 数据结构录 之 单调队列单调栈。
- japidocs怎么设置参数必填_JApiDocs 动态生成接口文档,并解析java 源码中的注释...
- 四、MyBatis-映射文件
- 蓝桥杯 ADV-144 算法提高 01背包
- Async和Await异步编程的原理
- 什么是Spring Data?
- Mybatis in查询List或数组 场景实例
- Volatile(理解)
- js 格式化输出_JS之 调试
- kettle下载windows共享文件夹到本地
- 电信网速怎么测试软件,电信网速测试在线(中国电信自助测速app)
- 解放生产力,VSCode使用小技巧
- vLive带你走进虚拟直播世界
- js 日期时间格式化,年月日时分秒
- Excel表格如何保存为网页形式
热门文章
- 对Web页面元素的绝对唯一引用方法
- Java与WCF交互(一):Java客户端调用WCF服务
- “cannot resolve symbol R” in Android Studio
- System Center 2012 R2 CM系列之安装Configuration Manager
- Shall的变量功能
- python3 ThreadPoolExecutor 线程池大小设置
- linux /etc/hosts.allow和/etc/hosts.deny 限制 禁止 ip连接 黑名单 白名单
- goland 设置project gopath
- winrar远程代码执行漏洞复现(cve-2018-20250)
- python3 网络编程 主机字节序 网络字节序 相互转换