几年前,我们大多数人习惯到处编写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/
参考:从Java(B)Log博客的JCG合作伙伴 Jakub Kubrynski 了解Spring Web初始化 。

翻译自: https://www.javacodegeeks.com/2014/01/understanding-spring-web-initialization.html

了解Spring Web初始化相关推荐

  1. spring初始化web_了解Spring Web初始化

    spring初始化web 几年前,我们大多数人习惯到处编写XML配置文件,甚至可以设置简单的Java EE应用程序. 如今,使用Java或Groovy来配置项目已成为首选方式–您只需要看一下Sprin ...

  2. 从web.xml谈谈SpringMVC集成spring的初始化流程及SpringBoot集成SpringMVC

    一.关于servlet 详解servlet,https://www.runoob.com/servlet/servlet-tutorial.html 总览一下: servlet与servlet容器 J ...

  3. Spring Web MVC(一)

    概述 Spring Web MVC框架的特点 五大核心组件 编程步骤 五大核心组件 DispatcherServlet前端控制器 WebApplicationContext中特殊的bean 处理过程 ...

  4. 透过源码详解Spring Security 初始化流程

    Spring Security在3.2版本之后支持Java Configuration,即:通过Java编码形式配置Spring Security,可不再依赖XML文件配置,本文采用Java Conf ...

  5. Spring Web Flow实例教程

    目录: 参考文献 购物车用例 什么情况下可以使用 Spring Web Flow? 配置 Spring Web MVC 配置 Spring Web Flow 2.0 的基础 在购物车示例应用中配置 S ...

  6. Spring Web Flow 2.0 入门详解

    目录: 参考文献 购物车用例 什么情况下可以使用 Spring Web Flow? 配置 Spring Web MVC 配置 Spring Web Flow 2.0 的基础 在购物车示例应用中配置 S ...

  7. Spring Web MVC是什么

    2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...

  8. Spring Web Flow 入门demo(二)与业务结合 附源码

    转载地址 http://blog.csdn.net/hejingyuan6/article/details/46516287 第一部分demo仅仅介绍了简单的页面跳转,接下来我们要实现与业务逻辑相关的 ...

  9. spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程...

    它既是 DispatcherServlet 的 (WebApplicationContext)默认策略,又是 ContextLoaderListener 创建 root WebApplicationC ...

最新文章

  1. python使用sklearn中的make_classification函数生成分类模型(classification)需要的仿真数据、使用pandas查看生成数据的特征数据、目标数据
  2. hmr webpack 不编译_一文搞懂 webpack HMR 原理
  3. idea 快捷键获取类的全限定类名(包名+类名)
  4. 操作系统——页面置换算法
  5. 大道至简第三章。感受。
  6. STM32工作笔记0027---理解电阻的串联和并联
  7. 子集数据帧中的丢包因子级别
  8. 数据可视化插件 echart
  9. 面试题:什么叫2B树
  10. 晶体管制程极限之后,多层CPU是否可能?
  11. 如何修改MyEclipse的默认工作路径Workplace
  12. 中空格的asc码表_Excel怎么快速提取混合单元格中的中文、英文、数字?
  13. 数商云渠道分销管理系统方案:分销渠道系统趋势、作用、功能、业务场景
  14. QQ群反向昵称、恶搞昵称的原理
  15. 在scrapy里使用cookie获取美团外卖的数据
  16. 调研:暴力恐怖犯罪识别(图像识别)
  17. C# 重载 Equals() 方法、重载运算符、声明显隐式转换的简要整理
  18. 光速掌握史上最全--计算机数制转换
  19. (隐藏滚动条)滚动条隐藏但是内容可以滚动游览器兼容
  20. 如何将本地仓库代码推到远程仓库

热门文章

  1. latex 数学公式_技能分享——LaTeX篇I
  2. VMnet1和VMnet8 未识别的网络的解决方法
  3. Java版大顶堆的实现
  4. Hibernate关联关系配置(一对多、一对一和多对多)
  5. java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事
  6. slf4j 记录日志文件_教程:正确的SLF4J日志记录用法以及如何检查它
  7. java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话
  8. javaone_JavaOne 2014:会议与合同利益冲突
  9. Java 8中的StringJoiner与String.join的示例
  10. 部署gradle_使用Gradle消除开发重新部署