SpringBoot自动装配原理

SpringBoot自动装配原理:

SpringBoot提供了大量的自动配置类XxxAutoConfiguration,这些配置类都默认配置了大量的信息,包括redis、MongoDB、RabbitMQ、Aop等,这些配置类都使用@EnableConfigurationProperties指定了生效的属性配置类XxxPropertes,XxxProperties指定了自动配置类XxxAutoConfiguration的默认配置,这些自动配置类XxxAutoConfiguration的全限定类名放在spring-boot-configurat包下的META-INF/sring.factories下,springboot的启动类就可以在启动的时候加载该文件中的所有配置类,根据条件去判断应该配置哪些自动配置类,如:是否存在指定类、容器是否存在指定bean等条件判断该配置类是否生效,从而完成自动装配。

自动自动配置类上都有类似如下注解:判断在什么条件下,自动配置类生效。
在这里插入图片描述

自动配置实现过程:
采用组合注解修饰启动类实现:
@SpringBootApplication:该注解修饰SpringBoot的启动类,打开可以看到,它除了包含四个元注解,还组合了三个主要的注解:
在这里插入图片描述

1、@SpringBootConfiguration:打开注解发现,它组合的主要注解就是@Configuration,主要作用就是指定了该类为一个配置类。
2、@ComponenScan:这个注解自动扫描并加载复合条件的Bean到容器中,默认会扫描启动类所在的包以及子包中的类。
3、@EnableAutoConfiguration:该注解是SpringBoot自动装配实现的主要注解,它也是一个组合注解,打开注解:
在这里插入图片描述
可以看到它的主要实现分为两个:
@AutoConfigurationPackage:这个注解组合了@Import(AutoConfigurationPackages.Registrar.class),也就是给当前配置类导入了自动配置包下的Registrar.class配置类,该配置类调用registerBeanDefinitions方法,实际调用的是register(registry,new PackageInport(metadata).getPackafeName);
在这里插入图片描述
打开register方法,可以看到该方法主要为Spring容器注入了BasePackages(启动类所在的包路径)的beanDefinition(Bean定义)。目的是将启动类的包路径传入容器。官网解释在后面整合jpa时会用到
在这里插入图片描述
@Import({AutoConfigurationImportSelector.class}):导入自动配置选择器,主要方法:
selectImports()该方法执行包括两步:
在这里插入图片描述
第一步:先调用this.getAutoConfigurationEntry():getAutoConfigurationEntry包含几部分:
在这里插入图片描述
第二步:StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());通过工具类将实际生效的自动配置类数组ArrayList转换成数组。

以上是关于SpringBoot注解@SpringBootApplication注解的相关内容,下面介绍SpringApplication.run()的执行流程:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值