springboot启动及自动装配原理

JaxYoun      2022-05-07     206

关键词:

一、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");
	}
}

springboot自动装配(代码片段)

...作用2、spring自动装配的原理2.1、启动类上注解的作用@SpringBootApplication@SpringBootConfiguration@EnableAutoConfiguration@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)@ComponentScan2.2、springboot自动装配的流程3、相关注... 查看详情

springboot自动装配定义与自定义starter原理,及如何实现自定义装配

前言SpringBoot自动装配定义与自定义starter,基于约定大于配置的原则,实现Spring组件自动装配的目的。 装配的依赖(方式) 模式注解、@Enable模块、条件装配、工厂加载机制。激活自动化装配、实现自动化装配、配置自动... 查看详情

springboot自动装配定义与自定义starter原理,及如何实现自定义装配

前言SpringBoot自动装配定义与自定义starter,基于约定大于配置的原则,实现Spring组件自动装配的目的。 装配的依赖(方式) 模式注解、@Enable模块、条件装配、工厂加载机制。激活自动化装配、实现自动化装配、配置自动... 查看详情

springboot自动装配(代码片段)

1、自动装配是什么及作用springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理2、spring自动装配的原理2.1、启动... 查看详情

springboot自动装配原理及自定义start开发(代码片段)

SpringBoot自动装配原理及自定义start开发前言:    大部分互联网公司都是使用SpringBoot,或SpringCloud作为开发框架。在我们开发中,很可能遇到要开发公共组件提供给其他人调用的场景。随着项目版本的迭代,很... 查看详情

springboot自动装配原理

目录工作原理剖析自动配置生效工作原理剖析SpringBoot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar中:SpringBoot的启动类上有一个@SpringBootApplication注解,这个注解是SpringBoot项目必不可少的注解。那么自动配置原理一定和这... 查看详情

从源码中理解springboot自动装配原理

一、什么是自动装配SpringBoot定义了一套接口规范,这套规范规定:SpringBoot在启动时会扫描外部引用jar包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到Spring容器,并执行类中定义的各种操作。对于外部jar包来说,... 查看详情

springboot的自动装配原理

原理初探自动配置:pom.xml1.父依赖其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件!<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2. 查看详情

springboot自动装配原理详细讲解(清楚明白)

注意看代码加的中的注解1.启动类上因为加上了@EnableEurekaServer这个注解才可以实现自动装配@SpringBootApplication@EnableEurekaServerpublicclassEurekaApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(EurekaApp 查看详情

springboot-自动装配原理(代码片段)

SpringBoot-自动装配原理出自狂神说Javapom.xmlspring-boot-dependencies:核心依赖在父工程中我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库启动器<dependency><groupId>org.springframework.bo... 查看详情

springboot-自动装配原理(代码片段)

SpringBoot-自动装配原理出自狂神说Javapom.xmlspring-boot-dependencies:核心依赖在父工程中我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库启动器<dependency><groupId>org.springframework.bo... 查看详情

springboot自动装配原理详细讲解(清楚明白)(代码片段)

注意看代码加的中的注解1.启动类上因为加上了@EnableEurekaServer这个注解才可以实现自动装配@SpringBootApplication@EnableEurekaServerpublicclassEurekaApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(EurekaApp 查看详情

springboot自动装配的原理

1.springboot自动装配主要是基于注解编程,和预定优于配置的思想来进行设计的自动装配就是自动地把其他组件中的Bean装载到IOC容器中,不需要开发人员再去配置文件中添加大量的配置,我们只需要在springboot的启动类... 查看详情

聊聊什么是springboot的自动装配原理(代码片段)

...置繁琐的xml,比如MVC、事务、数据库连接等繁琐的配置。SpringBoot的出现就无需这些繁琐的配置,因为SpringBoot基于约定大于配置的理念,在项目启动时候,将约定的配置类自动配置到IOC容器里。这些都因为SpringBoot有自... 查看详情

springboot自动装配原理

1 查看详情

springboot自动装配原理@enableautoconfiguration

参考技术A1、springboot启动会加载大量的自动配置类:(在下面的spring.factories文件中)2、通过@ConditionalOnXXX判断我们是否导入了相关的功能(就是pom文件中的starter),如果导入了,就会自动配置。4、给容器中添加自动配置类的时... 查看详情

springboot自动装配

引言不论在工作中,亦或是求职面试,SpringBoot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。当然,作为SpringBoot的精... 查看详情

springboot自动装配原理详细讲解(清楚明白)(代码片段)

...上了@EnableEurekaServer这个注解才可以实现自动装配@SpringBootApplication@EnableEurekaServerpublicclassEurekaApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(EurekaApplication.class);2.自动装配的核心方法 loadSpringFactories()protectedList<Strin... 查看详情