一、Springboot版本
spring-boot-2.2.9.RELEASE版本
二、springboot源码剖析
1、源码剖析-依赖管理
Starter机制:(官方提供了很多starter组件依赖,比如spring-boot-starter-redis、spring-boot-starter-mq等)
spring-boot-starter-web pom.xml将常用的依赖dependency直接引入,解决了依赖版本冲突问题。 spring-boot-starter-web依赖启动器主要作用是打包了web开发场景所需要的底层所有依赖(基于依赖传递,当前项目也存在对应的依赖jar包),就可以实现web场景开发,不需要额外引入tomcat服务器已经其他web依赖文件。
自动引入了spring-boot-starter、spring-boot-starter-json、spring-boot-starter-tomcat、spring-boot-starter-validation、spring-web、spring-webmvc等pom依赖。
2、源码剖析-自动配置
原理:根据我们添加的jar包,会自动配置一些配置类的bean注册进入IOC容器,我们可以根据需要使用@autowired或@resource等注解来使用它。
@SpringbootApplication 组合注解
2.1 @EnableAutoConfiguration注解(启动自动配置功能)
总结:这个类主要就是注册一个bean,这个bean就是org.springframefork.boot.autoconfigure.autoConfigurarionPackages BasePackages,它有一个参数,使用了@AutoConfigurationPackage这个注解类所在包路径(com.hya.scc.task),保存自动配置类以供之后的使用,比如给JPA entity扫描器来扫描开发人员通过@entity定义的entity类。
2.2 @Import({AutoConfigurationImportSelector.class})
将AutoConfigurationImportSelector类导入到spring容器中,它可以帮助springboot应用将所有服务条件的@configuration配置都加载到当前springboot创建并使用的IOC容器(ApplicationContext)中。
2.3自动配置加载bean全流程:
3、源码剖析-Run方法执行流程
1》、获取并启动监听器
2》、构造应用上下文环境
3》、初始化应用上下文(同时也创建了IOC容器BeanFactory):当前环境和应用的属性集合
4》、刷新应用上下文前的准备阶段(完成相关属性设置和bean对象创建)
spring容器在启动的时候,会将类解析成spring内部的beanDefinition结构,并将beanDefinition存储到DefaultListableBeanFactory的map(beanDefinitionMap)中。
核心的两个步骤:
5》、刷新应用上下文(核心步骤)
6》、刷新应用上下文后的扩展接口
整个流程:
4、源码剖析-自定义Starter
starter就是一个外部的项目组件,我们需要使用它的时候就可以在当前springboot项目中引入它。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时候只需要将其pom中引用依赖即可,在用springboot为我们完成自动装配,就非常轻松。
案例:动态数据源、登录模块、基于AOP技术实现日志切面
定义一个含有主键@enableAutoConfiguration的类,并注入bean对象
spring.factories 文件配置启动类
pom文件引入spring-boot-xxx-starter依赖
5、源码剖析-内嵌tomcat
tomcat的自动配置类:servletWebServerFactoryAutoConfiguration类
6、源码剖析-自动配置springmvc
DispatcherServletAutoConfiguration自动配置类
servletContext.addService(name, this.servlet);
DispatcherServlet:前端控制器
DispatcherServletRegistrationBean:DispatcherServlet的注册类:负责将DispatcherServlet注册到servletContext中;
DispatcherServlet是如何被注册到servletContext中?