SpringBoot 自动装配原理( 二 )

方法调用SpringFactoriesLoader.loadFactoryNames()扫描所有含有META-INF/spring.factories文件的jar包,将spring.factories文件中@EnableAutoConfiguration对应的类注入到IOC容器中 。
这些属性自动配置到IOC之后就无需自己手动配置bean了,Spring Boot中的约定大于配置理念,约定是将需要的配置以约定的方式添加到IOC容器中 。
自动配置生效条件那是不是spring.factories文件对应的配置都会加载到IOC容器中?比如下面的Kafka自动配置类:
@Configuration@ConditionalOnClass(KafkaTemplate.class)@EnableConfigurationProperties(KafkaProperties.class)@Import({ KafkaAnnotationDrivenConfiguration.class, KafkaStreamsAnnotationDrivenConfiguration.class })public class KafkaAutoConfiguration { private final KafkaProperties properties; private final RecordMessageConverter messageConverter; public KafkaAutoConfiguration(KafkaProperties properties, ObjectProvider<RecordMessageConverter> messageConverter) {this.properties = properties;this.messageConverter = messageConverter.getIfUnique(); } @Bean @ConditionalOnMissingBean(KafkaTemplate.class)public KafkaTemplate<?, ?> kafkaTemplate(ProducerFactory<Object, Object> kafkaProducerFactory,ProducerListener<Object, Object> kafkaProducerListener) {....}其中有几个注解:
@ConditionalOnClass@ConditionalOnMissingBean

  • @ConditionalOnClass表示在类路径中存在类才会配置该配置类 。只有引入相关依赖才会自动配置该配置类 。
  • @ConditionalOnMissingBean表示只有不存在对应的类的bean才会自动配置该类 。
所以spring.factories里面并不是所有的bean都会装配到IOC容器中,只会按需配置对应的bean
总结
  • Spring Boot自动配置原理
    • 1、@EnableAutoConfiguration注解导入AutoConfigurationImportSelector类 。
    • 2、执行selectImports方法调用SpringFactoriesLoader.loadFactoryNames()扫描所有jar下面的对应的META-INF/spring.factories文件.
    • 3、限定为@EnableAutoConfiguration对应的value,将这些装配条件的装配到IOC容器中 。
  • 自动装配简单来说就是自动将第三方的组件的bean装载到IOC容器内,不需要再去写bean相关的配置,符合约定大于配置理念 。
  • Spring Boot基于约定大于配置的理念,配置如果没有额外的配置的话,就给按照默认的配置使用约定的默认值,按照约定配置到IOC容器中,无需开发人员手动添加配置,加快开发效率 。
觉得文章不错的话,点个赞吧!
SpringBoot 自动装配原理

文章插图

经验总结扩展阅读