SpringBoot启动及自动装配原理

一、servlet2(老spring-mvc)

  1. 配置文件:
  • web.xml:主要配置项目启动项
  • application-context.xml:主要配置项目包扫描、各种bean、事务管理
  • springMVC.xml:主要配置controller包扫描、视图解析器、参数解析器
  1. 启动过程:
  • 每一个spring项目启动时都需要初始化spring-context,对于非web项目可以在程序main方法中触发这个context的初始化过程。
  • 由于web项目的启动入口在容器,所以开发者不能直接触发spring-context的初始化,就需要将初始化过程与容器的启动过程做强关联。
  • 由于容器启动时会加载解析web.xml文件,所以web.xml正是建立关联的好地方。web.xml中所配置的ContextLoadListener就是这个关联点,它监听到容器启动了就会去初始化spring-context。
  • 由于DispatcherServlet是全局核心控制器,所有的请求都需要被它拦截,所以他的启动时机需要配置,默认是第一个请求到来时才实例化它。
  • 但是可以将它配置为随容器启动而初始化,在DispatcherServlet初始化过程中去读取springMVC.xml配置文件,完成controller映射、视图解析、参数解析等工作。

二、servlet3

  1. Servlet3规定,如果在当前项目的classPath下,存在META-INF/services/javax.servlet.ServletContainerInitializer配置文件,且文件中写了ServletContainerInitializer的实现类的全类名,容器启动时实现类的onStartup方法就会被调用。在spring中配置的ServletContainerInitializer接口实现类是org.springframework.web.SpringServletContainerInitializer。
  2. 上面提到的spring提供的ServletContainerInitializer实现类上有一个@HandlesTypes(WebApplicationInitializer.class)注解,此注解会将括号中的WebApplicationInitializer接口在项目中的所有实现类组装为set,在SpringServletContainerInitializer的onStartup方法中进行遍历实例化并一一调用实例的onStartup方法,SpringBoot提供的WebApplicationInitializer接口实现类是SpringBootServletInitializer,此时项目的spring-contextdispatcherServlet初始化操作就可以放到这个方法中来,这样就取代了web.xml。
  3. 通过@Configuration注解,之前需要在spring-application-context.xml中配置的bean注入到了容器,此时对应的xml配置文件就被取代了。
  4. springMVC.xml的主要功能是扫描具有@Controller的类,由于启动类上的@SpringBootApplication注解集成了@ComponentScan,它默认会扫描启动类当前包及子包下所有类,所以springMVC.xml的功能被取代了。

三、spring-boot启动

  1. 当执行spring-boot启动类的main函数时,会实例化一个Tomcat对象,然后调用了Tomcat对象的一连串方法:
 Tomcat tomcat = new Tomcat();
 tomcat.addWebApp("/", "D:/app/");  //调用此方法是将项目当做web项目放入容器,同时也会触发ServletContainerInitializer的onStartup方法
 tomcat.setPort(8080);
 tomcat.start();
 tomcat.getServer().await();  //启动线程,阻塞等待
  1. 方法添加@ResponseBody注解表示返回值交给消息转换处理,否则就交给视图解析器处理。
@Configuration
public class GsonMessageConverterConfig implements WebMvcConfigurer {

	@Override //自定义消息解析器
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		converters.add(new GsonHttpMessageConverter());
	}

	@Override //自定义视图解析器
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/", ".jsp");
	}
}

原文地址:https://www.cnblogs.com/JaxYoun/p/12597676.html

时间: 2024-08-01 07:25:00

SpringBoot启动及自动装配原理的相关文章

SpringBoot启动流程分析(五):SpringBoot自动装配原理实现

SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四

Eureka 系列(03)Spring Cloud 自动装配原理

Eureka 系列(03)Spring Cloud 自动装配原理 [TOC] 本文主要是分析 Spring Cloud 是如何整合 Eureka 的,但不会具体分析 Eureka 的源码,之后的文章会对 Eureka 的源码做一个比较具体的分析. 1. Eureka Client 自动装配 org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.netflix.eureka.

【springboot】自动装配原理

摘自:https://mp.weixin.qq.com/s/ZxY_AiJ1m3z1kH6juh2XHw 前言 Spring翻译为中文是“春天”,的确,在某段时间内,它给Java开发人员带来过春天,但是随着我们项目规模的扩大,Spring需要配置的地方就越来越多,夸张点说,“配置两小时,Coding五分钟”. 这种纷繁复杂的xml配置随着软件行业一步步地发展,必将逐步退出历史舞台. SpringBoot介绍 来自:百度百科 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是

SpringBoot:认认真真梳理一遍自动装配原理

Spring翻译为中文是“春天”,的确,在某段时间内,它给Java开发人员带来过春天,但是随着我们项目规模的扩大,Spring需要配置的地方就越来越多,夸张点说,“配置两小时,Coding五分钟”. 这种纷繁复杂的xml配置随着软件行业一步步地发展,必将逐步退出历史舞台. SpringBoot介绍 来自:百度百科 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样

SpringBoot自动装配原理

目录 工作原理剖析 自动配置生效 工作原理剖析 Spring Boot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar中: Spring Boot的启动类上有一个@SpringBootApplication注解,这个注解是Spring Boot项目必不可少的注解.那么自动配置原理一定和这个注解有着千丝万缕的联系! @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Docume

跟跟Springboot启动容器,自动装配的过程

-----------------------------------------------------本文只作为跟代码的一个参考,建议可以根据思路在指定类中断点调试学习------------------------------------------------------------ 运行被@SpringBootApplication修饰的程序入口,执行main方法,调用SpringApplication的run方法. 下面是从创建controller层bean的方法调用链如下:(备注:

SpringBoot嵌入式Tomcat的自动配置原理

在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.autoconfigure包下的spring.factories文件中,而嵌入Tomcat的原理就在这个文件中加载的一个配置类:org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguratio

SpringBoot 2.X集成 jdbc自动配置原理探究

前言 Springboot对于数据访问层,不管是 SQL还是 NOSQL,Spring Boot 底层都是采用 Spring Data 的方式统一处理.Spring Data 是 Spring 家族中与 Spring Boot.Spring Cloud 齐名且知名项目.想要更好的了解Sping Data,可以参考Sping Data 官网:https://spring.io/projects/spring-data 事实上,Springboot整合jdbc基本上企业都不会这么去使用,但是为什么要

SpringBoot启动流程分析(四):IoC容器的初始化过程

SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四