自己对SpringBoot自动配置的一些理解

Spring是如何导入Bean的

  • Spring 1.x:使用xml
  • Spring 2.x:xml + @Component (在xml中写<component-scan>)
  • Spring 3.x:去xml化,纯注解开发 AnnotationConfigurableApplicationContext

使用纯注解开发:
必要的是一个@Configuration配置类

  1. @ComponentScan + @Component
  2. @Bean, @BeanFactory
  3. @Import(Bean.class)
  4. @Import(? implements ImportSelector)
  5. @Import(? implements ImportBeanDefinitionRegistrar)

Spring Boot如何自动配置

需求:引入第三方jar包后,我们希望第三方jar包中的Bean,自动注入到我们的IoC容器中,我们几乎不需要做任何特殊处理,直接就可以使用IoC中的Bean了。

技术选型:

  1. xml:维护起来很烦,需要自己手动写xml注入,排除。
  2. @ComponentScan:我们需要知道第三方的包名,并且手动输入到注解上,我们知道包名一般是这些公司的url倒序,所以包名是千奇百怪的,我们维护起来很麻烦,所以排除这个方案。
  3. @Bean@BeanFactory:需要我们手动注入,排除。

剩余一个@Import的方案,我们具体看下。

使用@Import可以导入具体的类,特别是还可以配合ImportSelector接口和ImportBeanDefinitionRegistrar有策略的导入类。

其实ImportSelector接口和ImportBeanDefinitionRegistrar提供给了我们一个自动化导入的机会,因为这俩是接口,可以实现,然后在里面写扫描的逻辑,返回所有需要注入的类的全类名。

Spring Boot的自动配置方式,其实就是在一个ImportSelector里面实现了一个扫描逻辑,并且在程序开始的时候就@Import了这个ImportSelector

扫描逻辑是,扫描当前所有jar包中的META-INF/spring.factories,里面存储的是key-value文本形式的数据,有很多需要导入的配置类Bean的全类名,这些配置类里面包括了需要自动导入的Bean。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.redisson.spring.cache.RedissonCacheStatisticsAutoConfiguration

完整逻辑

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43696693/article/details/129813658