springboot运行原理剖析
1.SpringApplication类作用及run()方法作用
- 这个SpringApplication类整合了其他框架的启动类,只要运行这一个类,所有的整合就完成了。
- 调用run函数,将当前启动类的字节码传入(主要目的是传入@SpringBootApplication这个注解)以及main函数的args函数。
- 通过获取当前启动类的核心信息,创建IOC容器。
2.当前启动类@SpringBootApplication详细剖析
run函数传入的当前启动类的字节码,最重要的是传入了@SpringBootApplication,点开它,就能发现它是一个复合注解,有多个注解组成,可以分为4类:

- 第一类:JDK原生注解4个
- @Target(ElementType.Type):当前注解使用的范围
- @Retention(RetentionPolicy.RUNTIME):生命周期
- @Documented:生命在生成doc文档时是否带着注解
- @Inherited:子类继承父类的注解
- 第二类:@SpringBootConfiguration
- 点开该注解源码,会发现本质是@Configuration,定义该类是个配置类,功能等同于xml配置文件。

-
@Configuration和@Bean,两个注解合作创建一个简单的Spring配置类,可以用来代替响应的xml配置文件可以理解为创建了IOC容器了。
- 第三类:@ComponentScan,包扫描功能。
- 这个注解对应的是Spring的XML配置中的ComponentScan,也就是自动扫描并加载符合条件的组件,将他们加载到IOC容器中。也可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不知当默认扫描引导类所在的包以及子包。所以我们启动类最好放在root package下,走默认扫描即可扫描所有组件。
- 第四类:@EnableAutoConfiguration
- 点开源码会发现本质是@Import,导入功能

- @EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器。@EnbaleAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置,如:添加了spring-boot-starter-web,就会自动添加Tomcat和SpringMVC的依赖,springboot会对Tomcat和SpringMVC进行自动配置。
- springboot是如何完成自动配置的呢?
- 启动类的run方法执行,传入SpringBootApplication注解的字节码
- 这个注解是个复合注解,其中有一个EnableAutoConfiguration
- 这个EnableAutoConfiguration中又有一个Import注解,这个注解可以用来导入其他类
- 通过这个Import,导入的是AutoConfigurationImportSelector,这个类内部有一个方法selectImports。这个方法会扫描所有jar包下的spring.factories文件,解析其中的配置(key=value的键值对形式),创建对应的类到Spring容器中。


浙公网安备 33010602011771号