SpringBoot的自动装配原理
2022-01-19 17:52:50 0 举报
从spring源码分析SpringBoot的自动装配原理
作者其他创作
大纲/内容
this();
configurations.removeAll(exclusions);
pom引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--‐导入配置文件处理器,配置文件进行绑定就会有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies>
使用到了@import注解来完成导入配置的功能,服务启动时,Spring内部在解析@Import注解时会调用getAutoConfigurationEntry方法
在 resources 下创建文件夹 META-INF 并在 META-INF 下创建文件 spring.factories ,内容如下:
(实现ImportSelector接口)EnableAutoConfigurationImportSelectorselectImports()
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\ com.starter.tulingxueyuan.HelloAutoConfitguration
AnnotationConfigReactiveWebServerApplicationContext
@EnableAutoConfiguration
// 从META-INF/spring.factories中获得候选的自动配置类
XXX-starter-autoconfigurer
如:
@Import(EnableAutoConfigurationImportSelector.class)
ConfigurationClassParserparse()
@AutoConfigurationPackage
ConfigurationClassPostProcessorpostProcessBeanFactory()
this.register(componentClasses);
XXX-starter
依赖
@ConfigurationProperties(\"tuling.hello\")public class HelloProperties {}
@Configuration@ConditionalOnProperty(value = \"tuling.hello.name\")@EnableConfigurationProperties(HelloProperties.class)public class HelloAutoConfitguration {
将当前配置类所在包保存在BasePackages的Bean中
仿照 spring-boot-starter,基于此模式,我们可以自定义starter
解析Import,创建EnableAutoConfigurationImportSelector实例(实现ImportSelector接口)
processDeferredImportSelectors()
Spring Boot的配置类
SpringFactoriesLoader.loadFactoryNames
SpringBoot的自动装配原理
processConfigBeanDefinitions()
@SpringBootConfiguration
安装成本地jar包,即可被引入其他项目开始测试
loadSpringFactoriesclassLoader.getResources(\"META-INF/spring.factories\")
removeDuplicates(configurations);
invokeBeanFactoryPostProcessors()
@SpringBootApplication
getConfigurationClassFilter().filter(configurations);
AnnotationConfigApplicationContext
this.refresh();
SpringBoot的主配置类
createApplicationContext
SpringApplicationrun()
// 这个方法是调用实现了AutoConfigurationImportListener 的bean.. 分别把候选的配置名单,和排除的配置名单传进去做扩展
AnnotationConfigServletWebServerApplicationContext(默认)
getAutoConfigurationEntry()方法
开启自动配置功能
getAttributes(annotationMetadata);
收藏
0 条评论
下一页