自动配置原理

参考: https://b23.tv/JFhubZ2

自动配置:springBoot自动去把第三方组件的bean装载到ioc容器里面,不需要开发人员再写bean相关的配置。

在启动类上加上@SpringBootApplication注解就可以实现自动配置。

举例

例如我们可以在pom文件中引入redis的starter依赖,在场景启动器starter里面含有要引用的配置包依赖。配置包中含有一个@Configuration的配置类,在这个配置类里定义了要注入ioc容器的bean对象。并且这个配置类的全路径会被放在spring.factories这个文件当中,springBoot可以通过spring.factories这个文件得知第三方jar包中这个配置类的位置。springBoot通过importSelecttor接口利用ClassLoader获取spring.factories,加载配置文件,实现对配置类的动态加载

所以我们在springBoot中只需要引用redis的依赖就可以直接使用RedisTemplate了。

原理

首先,我们先来梳理一遍springboot的启动流程

springboot启动流程

主类指的是被@SpringBootApplication标记的类,也称源配置类。

显然,配置类的bean的注入是在第三步,所以我们着重看第三步。

加载配置类

第二步:递归处理,将含有@Component或者Import的配置类中的bean注入到容器中。自动配置类的加载也在这一步

两个重要注解

@ComponentScan

作用是扫描被Component修饰的配置类,将被符合条件的类(例如被@Bean或者@Component标记)注入到容器中。

@Import

作用是将外部配置类导入到当前配置类中,从而使外部配置类的bean也能加载到容器中。

普通类

ImportSelector实现类

导入一连串配置类中的所有bean

例如下面就是把ZooConfig这个类放进ImportSelector这个类中,后面@Import到ImportSelector时会加进去ZooConfig,实际作用就是利用ImportSelector可以导入多个类。

ImportBeanDefinitionRegistrar

动态地导入符合条件的bean

自动配置

自动配置的基础是使用了@Import的选择器ImportSelector

原因如下:

@Component进行自动装配要输入第三方Jar包的每一个Package,

@Import导入普通类要记住导入的所有类名,更加不划算

@Import的ImportBeanDefinitionRegistrar是对@Bean方法的一种补充,不使用

@SpringBootApplication结构

内部包括三个注解,EnableAutoConfiguration负责自动装配,注入外部依赖的bean。内部实现了@Import的导入选择器AutoConfigurationImportSelector

AutoConfigurationImportSelector

只需引入jar包,不用关心jar包的自动配置类,类名等信息。原理是使用ClassLoader读取所有jar包的META-IF/spring.factories,返回一个类名的集合,从中动态筛选出所需要的bean对象注入到容器中去。

AutoConfigurationImportSelector实现流程

@Conditional

SpringBootApplication流程

在启动后先创建ioc容器,然后注册源配置类,接着使用@Import和@ComponentScan加载所有符合条件的bean,自动装配在@EnableConfiguration里的@Import(AutoConfigurationImportSelector)里面加载jar包中配置类上的bean的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值