Springboot 的自动配置

@SpringbootApplication :

  • @SpringbootConfiguration

    • @Configuration
  • @ComponentScan

  • @EnableAutoConfiguration

    • @Import(AutoConfigurationImportSelector.class)

关键点是AutoConfigurationImportSelector,它通过SpringFactories机制加载配置文件,有个方法的作用就是去扫描了META-INF/spring.factories文件,扫描出所有key是EnableAutoConfiguration 或者AutoConfiguration 的value值,然后再通过@Conditional 注解过滤掉不必要的自动配置类,这个@Conditional 注解就相当于if,只有满足特定条件时候才会注册bean

ApplicationContext

就是IoC 容器

Springboot 启动流程

  • 创建IoC容器

  • 加载源配置类

    通常是main 方法所在的类,而且会被注解@SpringbootApplication 所修饰

  • 加载并处理所有的配置类

    Springboot 会自动找到所有的配置类,然后加载和处理它们

    找出源配置类,根据原配置类进行递归处理,其实这个时候就是区递归扫描@Component 注解和@Import 注解

    @ComponentScan 注解就是对指定的package进行扫描,如果没有指定package,默认扫描当前main所在的包;

    @Import 注解它有三种导入包的方式,分别是导入普通类,导入一个选择器ImportSelector ,导入一个注册器,如果导入普通类,那么就必须指定某个package和某个类的class对象非常麻烦,如果导入注册器,注册器其实是对@Bean方法的一个补充,所以这里选的是导入一个选择器

  • 实例化所有的单例Bean

    依赖注入和自动装配属于其中的环节

  • 启动web 服务器