目录
- 1. 说明
- 2. 启动类与注解
- 3. SpringApplication的构建与服务类型确定
- 4. 启动流程
- 5. 自动配置与Bean实例化
- 6. 启动内嵌服务器
1. 说明
- 1.Spring Boot的启动原理是一个复杂而又精妙的流程,它涉及多个组件和步骤的协同工作。
2. 启动类与注解
- 1.Spring Boot应用通常由一个带有@SpringBootApplication注解的主启动类启动。@SpringBootApplication是一个复合注解,它主要由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解构成
- 2.@SpringBootConfiguration:标记当前类为Spring配置类,等同于@Configuration注解。
- 3.@EnableAutoConfiguration:负责自动配置Spring应用上下文,加载符合条件的@Configuration配置类。这个注解通过@Import引入了AutoConfigurationImportSelector,该类负责从META-INF/spring.factories文件中加载自动配置类。
- 4.@ComponentScan:自动扫描并加载符合条件的Spring Bean,这些特定的注解大致包括@Controller、@Entity、@Component、@Service、@Repository等。
3. SpringApplication的构建与服务类型确定
- 1.SpringApplication.run()是Spring Boot应用启动的入口。
- 2.资源加载器与主方法类的记录:记录资源加载器和主方法类。
- 3.确定Web服务的类型:可能是SERVLET、REACTIVE或NONE。WebApplicationType.deduceFromClasspath()方法会根据类路径中存在的类来推断当前应用的Web环境类型。
- 4.加载配置:加载META-INF/spring.factories文件中的BootstrapRegistryInitializer、ApplicationContextInitializer和ApplicationListener配置。
4. 启动流程
- 1.初始化配置:通过类加载器读取classpath下所有的spring.factories配置文件,创建一些初始配置对象;通知监听者应用程序启动开始,创建环境对象environment,用于读取环境配置,如application.yml或application.properties。
- 2.创建应用程序上下文:创建ApplicationContext和BeanFactory对象。
- 3.刷新上下文(启动核心):
a.配置工厂对象,包括上下文类加载器、对象发布处理器、BeanFactoryPostProcessor。
b.注册并实例化BeanFactoryPostProcessor,并且调用这些处理器,对包进行扫描解析(主要是class文件)。
c.注册并实例化BeanPostProcessor。
d.初始化一些与上下文有特别关系的Bean对象(如创建Tomcat服务器)。
e.实例化所有BeanFactory缓存的Bean对象(剩下的)。
f.发布通知,通知上下文刷新完成(启动Tomcat服务器)。 - 4.通知监听者:启动程序完成。在启动过程中,大部分对象都是通过BeanFactory对象通过反射创建的。
5. 自动配置与Bean实例化
- 1.Spring Boot的自动配置机制会根据项目中添加的jar依赖,尝试猜测并配置可能需要的Bean。
- 2.自动配置类会根据条件进行加载和执行,以确保配置的正确性和合理性。
- 3.所有配置类和组件被加载后,Spring容器会根据需要创建和配置Bean实例。
- 4.这些Bean可能是由Spring Boot提供的自动配置,也可能是开发者自定义的Bean。
6. 启动内嵌服务器
- 1.Spring Boot内置了Tomcat、Jetty等Web服务器。
- 2.当Spring Boot应用程序启动时,它会根据配置文件中的信息自动创建Tomcat或Jetty等Web容器,并将Spring容器注册到Web容器中,使得Spring Boot应用程序可以直接以Web应用程序的形式运行。