简单总结SpringBoot的自动装配原理及流程

自动装配

自动装配是指SpringBoot会自动将Bean装配到IoC容器中。例如我们添加了Redis的starter依赖,那么我们需要使用RedisTemplate的时候,直接使用@Autowried将RedisTemplate从IoC容器中拿来注入就可以使用,不需要我们自己去使用XML或者JavaConfig去把RedisTemplate装配到IoC容器。

@EnableXXX

Spring提供了@Enable来将相关组件的Bean装配到IoC容器。@Enable是对于JavaConfig的@Configuratin和@Bean的封装,在@Enable中有一个@Import可以用于导入相关的配置类,然后将配置类中配置的Bean装配到IoC容器。

例如下面的这个配置类,配置了一个Bean:MyBean

	@Configuration  
    public class MyBeanConfiguration {  
        @Bean  
        public MyBean myBean() {  
            return new MyBean();  
        }  
    }

可以自定义一个@EnableXXX注解,在里面的@Import中导入想要导入的配置类。例如@EnableMyBean,在里面的@Import中导入MyBeanConfiguration这个类,就可以把MyBean装配到IoC容器中。

@EnableAutoConfiguration

在@SpringBootApplication中有@EnableAutoConfiguration注解,里面最主要的两个注解就是@Import和@EnableAutoConfigurationPackage

@EnableAutoConfigurationPackage的作用是将注解的类(即SpringBootApplication启动类)所在的包及其子包中的所有组件加载到IoC容器,所以我们写的包含@Service、@Controller等注解的类都要放在启动类的子包中

@EnableAutoConfiguration中的@Import与在@Enable中的不一样,不是去加载单个配置类,而是加载一个AutoConfigurationImportSelector类。AutoConfigurationImportSelector类实现了ImportSelector接口,里面只有一个抽象方法selectImports可以返回一个String数组。在AutoConfigurationImportSelector类中的实现就是返回一个需要导入的所有配置类名称

AutoConfigurationImportSelector中的简单流程总结

  1. 去META-INF/spring-autoconfigure-metadata.properties中加载自动装配的筛选条件元数据,用于后面去筛选符合条件的配置类
    在这里插入图片描述
  2. 获取所有符合条件的配置类,完成自动装配
    2.1 首先获得@EnableAutoConfiguration中的exclude、excludeName等属性
    2.2 使用SpringFactioriesLoader去扫描classpath下的META-INF/spring.factories文件,以EnableAutoConfiguration为key去获取value,value就是所有可以自动装配的配置类的全路径名
    在这里插入图片描述
    2.3 去除重复的配置类
    2.4 根据筛选条件元数据、exclude等将不需要的配置类去除
    2.5 进行广播
    2.6 返回过滤后的配置类集合

SpringBoot的自动装配就是通过拿到所有的配置类然后把配置类中配置的Bean全都加载到IoC容器中,实现自动装配。

细节请自行阅读源码

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[2\]和引用\[5\]的内容,可以得出springboot自动装配的核心原理流程图如下: 1. 在Spring Boot的启动类上标注@SpringBootApplication注解。 2. @SpringBootApplication注解通过@EnableAutoConfiguration注解间接标记在了Spring Boot的启动类上。 3. 在启动类的内部,会解析@Import注解,执行group的process方法。 4. process方法会找到所有JavaConfig自动配置类的全限定名对应的class。 5. 将所有自动配置类加载到Spring容器中。 6. 自动配置类中使用@Configuration注解标注,表示这是一个JavaConfig配置类。 7. 在JavaConfig配置类中使用@Bean标签配置类。 8. Spring Boot会根据自动配置类的配置信息,自动装配相应的组件。 请注意,这只是一个简化的流程图,实际的自动装配过程可能更加复杂。 #### 引用[.reference_title] - *1* *2* *3* [springboot自动配置原理(详细-带流程图)](https://blog.csdn.net/zkr1234562/article/details/128036830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *4* [SpringBoot自动装配原理详解](https://blog.csdn.net/m0_51431003/article/details/129564780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *5* [springBoot自动装配原理图解](https://blog.csdn.net/jll126/article/details/122861424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值