前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot - 自动装配 源码解析

SpringBoot - 自动装配 源码解析

作者头像
小小工匠
发布2022-04-14 15:26:13
6170
发布2022-04-14 15:26:13
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

文章目录

在这里插入图片描述
在这里插入图片描述

源码流程图

在这里插入图片描述
在这里插入图片描述

我们找几个比较重要的方法来讲一下

getAutoConfigurationEntry

主要的功能:进行扫描具有META-INF/spring.factories文件的jar包

/**
	 * Return the {@link AutoConfigurationEntry} based on the {@link AnnotationMetadata}
	 * of the importing {@link Configuration @Configuration} class.
	 * @param annotationMetadata the annotation metadata of the configuration class
	 * @return the auto-configurations that should be imported
	 */
	protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return EMPTY_ENTRY;
		}
		AnnotationAttributes attributes = getAttributes(annotationMetadata);
		 // 从META-INF/spring.factories中获得候选的自动配置类
		List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
		 // 排重
		configurations = removeDuplicates(configurations);
		 //根据EnableAutoConfiguration注解中属性,获取不需要自动装配的类名单
		Set<String> exclusions = getExclusions(annotationMetadata, attributes);
		 // 根据:@EnableAutoConfiguration.exclude
	   	 // @EnableAutoConfiguration.excludeName
 		 // spring.autoconfigure.exclude  进行排除
		checkExcludedClasses(configurations, exclusions);
		 // exclusions 也排除
		configurations.removeAll(exclusions);
		configurations = getConfigurationClassFilter().filter(configurations);
		// 这个方法是调用实现了AutoConfigurationImportListener的bean..  分别把候选的配置名单,和排除的配置名单传进去做扩展
		fireAutoConfigurationImportEvents(configurations, exclusions);
		return new AutoConfigurationEntry(configurations, exclusions);
	}

我们知道任何一个springboot应用,都会引入spring-boot-autoconfigure,而spring.factories文件就在该包下面。

spring.factories文件是Key=Value形式,多个Value时使用,隔开,该文件中定义了关于初始化,监听器等信息,而真正使自动配置生效的key是org.springframework.boot.autoconfigure.EnableAutoConfiguration

@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中.

源码图地址

https://www.processon.com/view/link/6256fc6de401fd072e0ea608

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 源码流程图
    • getAutoConfigurationEntry
    • 源码图地址
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档