springBoot 自动配置

1.通过各种注解实现了类与类之间的依赖关系,容器在启动的时候Application.run,会调用EnableAutoConfigurationImportSelector.class的selectImports方法(其实是其父类的方法)

2.selectImports方法最终会调用SpringFactoriesLoader.loadFactoryNames方法来获取一个全面的常用BeanConfiguration列表

3.loadFactoryNames方法会读取FACTORIES_RESOURCE_LOCATION(也就是spring-boot-autoconfigure.jar 下面的spring.factories),获取到所有的Spring相关的Bean的全限定名ClassName,有127个

4.selectImports方法继续调用filter(configurations, autoConfigurationMetadata);这个时候会根据这些BeanConfiguration里面的条件,来一一筛选,最关键的是@ConditionalOnClass,这个条件注解会去classpath下查找,jar包里面是否有这个条件依赖类,所以必须有了相应的jar包,才有这些依赖类,才会生成IOC环境需要的一些默认配置Bean

5.最后把符合条件的BeanConfiguration注入默认的EnableConfigurationPropertie类里面的属性值,并且注入到IOC环境当中




即:spring.factories 文件里有定义好的类的全限定名,项目启动后会调用loadSpringFactories方法,返回一个key=接口名(注解名),value=实现类(被注解类)集合 的Map结构(Map<String,List<String>>),把类全限定名按照接口名(注解名)分类(如果有自己写的spring.factories文件,也会进行读取和分类),将org.springframework.boot.autoconfigure.EnableAutoConfiguration作为查找的Key,获得一组对应的被注解类类名列表(@Configuration(配置)类)有127个,之后进行筛选,查看每个类的@ConditionalOnXXX注解里面的条件是否都满足,不满足的会被从List集合中去除,剩下的会被使用反射进行创建,同时通过类上的@EnableConfigurationProperties(XXXProperties.class)把XXXProperties类注入IOC容器,配置默认的属性值。最后使用。

posted @ 2021-05-29 01:25  一只小白的进修路  阅读(68)  评论(0)    收藏  举报