方法调用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
容器中 。
- 1、
- 自动装配简单来说就是自动将第三方的组件的
bean
装载到IOC
容器内,不需要再去写bean
相关的配置,符合约定大于配置理念 。 Spring Boot
基于约定大于配置的理念,配置如果没有额外的配置的话,就给按照默认的配置使用约定的默认值,按照约定配置到IOC
容器中,无需开发人员手动添加配置,加快开发效率 。
文章插图
经验总结扩展阅读
- 拼多多百亿补贴为什么自动退款
- 拼多多百亿补贴自动退款如何解决
- 菜鸟驿站自动签收但是还没取能拒收吗
- springboot整合项目-商城个人头像上传功能
- 自动化利器 Ansible - 从了解到应用
- vs 自定义代码块
- 六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)
- springboot项目整合-注册功能模块开发
- 支付宝哈啰单车怎么取消自动续费
- 自动化专业有必要转计算机吗 未来就业前景好吗