springBoot自动配置

springBoot的优势之一是:自动装配。

springBoot的自动配置,大体解释一下,当使用了特定注解后,springboot底层会帮我们进行配置,简化了简化手动配置的内容。

@SpringBootApplication

每一个springboot项目都会有一个启动类,在这个启动类里带有@SpringBootApplication注解,说明这是一个Spring Boot应用,它是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan的组合。

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    // ......
}
  • @ComponentScan 自动扫描
    作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
  • @SpringBootConfiguration 配置类
    它用来表示这是一个springboot的配置类,在这个注解的底层有一个@Configuration的注解

在这里插入图片描述

  • @EnableAutoConfiguration开启自动配置功能
    以前需要手动配置的,SpringBoot可以自动配置 ;只需要添加@EnableAutoConfiguration注解开启自动配置功能即可。

在这个注解底层还有两个注解:
在这里插入图片描述

  1. @AutoConfigurationPackage
    主要作用就是将主启动类所在的包下面所有的组件都扫描到spring容器中。
  2. @Import(AutoConfigurationImportSelector.class)

AutoConfigurationImportSelector :自动配置导入选择器,给容器中导入一些组件

AutoConfigurationImportSelector.class
			↓
    selectImports方法
    		↓
this.getAutoConfigurationEntry(annotationMetadata)方法
			↓
this.getCandidateConfigurations(annotationMetadata, attributes)方法
			↓
方法体:
 List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
			↓
在所有包名叫做autoConfiguration的包下面都有META-INF/spring.factories文件

在这里插入图片描述

@Conditional

在spring.factories文件中包含了springboot所支持的可自动配置的的装备类,但是自动配置时,这些类不会全部加载,@Conditional注解可以帮助springboot按需装配。

自定义用法

自定义类实现Condition接口,重写 matches 方法,在 matches 方法中进行逻辑判断,返回boolean值。

matches 方法两个参数:
​ 1. context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。
​ 2.metadata:元数据对象,用于获取注解属性。

SpringBoot 提供的常用条件注解

在springBoot-autoconfigure的condition包下有很多条件注解

  • @Conditional(条件类.class)注解
  • ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
  • ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
  • ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean
  • ConditionalOnBean:判断环境中有对应Bean才初始化Bean

总结

借用一下优秀作者的图示来总结一下吧
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值