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容器中。
posted @ 2021-12-11 18:25  sellingpear  阅读(406)  评论(0)    收藏  举报