SpringBoot - 自动装配 源码解析

Posted 小小工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot - 自动装配 源码解析相关的知识,希望对你有一定的参考价值。

文章目录


源码流程图

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

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容器中.


源码图地址

图画好了, 戳这里

以上是关于SpringBoot - 自动装配 源码解析的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot - 自动装配 源码解析

SpringBoot - 自动装配 源码解析

springBoot2.6.2自动装配(注解源码解析)

EurekaServer自动装配及启动流程解析

SpringBoot 源码解析 ----- Spring Boot的核心能力 - 自动配置源码解析

Spring Boot 启动源码解析二