SpringBoot-自动配置

1、自动配置的核心

通常springboot程序,咱们都会在主启动类上加上@SpringBootApplication注解,@SpringBootApplication是一个复合注解,上面标注了@ComponeScan,@EnableAutoConfiguration,默认开启了包扫码和自动配置。spring

@EnableAutoConfiguration注解上使用@Import导入了一个类,EnableAutoConfigurationImportSelectorspringboot

EnableAutoConfigurationImportSelector的父类中AutoConfigurationImportSelectorapp

有一个关键的方法selectImports(),这个方法会去找classpath下,名为spring.factories配置文件里面的须要自动配置的类列表elasticsearch

这里的factoryClassName就是 org.springframework.boot.autoconfigure.EnableAutoConfiguration ,后面经过classLoader加载spring-boot-autoconfigure.jar META-INF/spring.factories 文件,而后经过spring-boot

factoryClassName找到对应的自动配置类spa

 

注:(spring.factories文件自动配置类列表仍是很好用的,好比有些时候咱们须要排除某个自动配置,而你又不知道它到底有几个配置类,能够参照这里)3d

有了自动配置类列表还没完,springboot须要知道列表里面那些配置是咱们须要的,经过什么来判断呢?springboot最主要是经过了@Conditional家族注解,判断classpath有没有某个类,容器中有没有某个bean,application.yml文件中有没有某一条属性而且这个属性为某个值等等这些条件来判断,我是否须要装载这个配置类code

下面以elasticsearch为例blog

springboot要装载elasticsearch配置须要知足如下条件:it

  • classpath下面必需要有 org.elasticsearch.client.Client  TransportClientFactoryBean  NodeClientFactoryBean 三个class文件
  • 若是springboot上下文中没有名为 elasticsearchClient 的bean,咱们若是配置了这个bean存在于上下文,那么自动配置就不会触发了

2、@Conditional

看了上面应该知道 ,@Conditional的这些注解是是否启用自动配置类的关键。下图来自《Spring Boot实战》一书:

 

3、总结

 简单来讲,Spring Boot的自动配置分为如下几个步骤:

一、@EnableAutoConfiguration注解开启自动配置,并找到spring-boot-autoconfigure.jar包里的 META-INF/spring.factories 文件

二、经过factoryClassName找到 META-INF/spring.factories 文件对应的自动配置类列表

三、springboot上下文根据自动配置类里的 @Conditional 家族注解选择是否要加载这些配置

相关文章
相关标签/搜索