SpringBoot自动配置理解

首先,所有的启动类中都有一个@SpringBootApplication注解:

放置在Springboot启动类上,表明该类是开启Springboot容器的入口,它是一个复合注解。里面包含了包扫描,自动注入,配置注入的功能。

按Ctrl+鼠标左键点击进入此注解,可以看到这个复合注解包含的注解有:

其中,有一个@EnableAutoConfiguration注解:

其作用就是帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。

具体机制如下图:

1.首先进入@EnableAutoConfiguration注解,其内部有如下注解

我们可以看到其内部导入了一个AutoConfigurationImportSelector.class的类

点击进入此类,可以发现:通过getAutoConfigurationEntry()获取了所有的实体

而实体从哪获得的呢,就是通过下面的 getCandidateConfigurations()获取候选的配置

而候选的配置从哪获取呢?就是从 getCandidateConfigurations()中的getBeanClassLoader()获取:

以及

获取标注了 @EnableAutoConfiguration注解下的所有类

接着通过SpringFactoriesLoader.loadFactoryNames()方法加载配置

loadFactoryNames()中又通过loadSpringFactories()加载配置

而loadSpringFactories()又从获取的资源中遍历所有的url

这个 FACTORIES_RESOURCE_LOCATION资源指向的就是META-INF下的spring.factories

也就是AutoConfiguration下的META-INF下的spring.factories:

它将读取到的资源封装到properties中,最后返回让我们能够使用

总结:

1).SpringBoot启动会加载大量的自动配置类 2)、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中; 3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就 不需要再手动配置了) 4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置 文件中指定这些属性的值即可; xxxxAutoConfigurartion:自动配置类;给容器中添加组件

xxxxProperties:封装配置文件中相关属性;

经验分享 程序员 微信小程序 职场和发展