Spring Boot是如何扫描和加载bean的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot是如何扫描和加载bean的相关的知识,希望对你有一定的参考价值。
参考技术A 从SpringApplication#refreshContext方法开始追踪,找到AbstractApplicationContext#invokeBeanFactoryPostProcessors方法,继续深入找到ConfigurationClassParser#doProcessConfigurationClass方法,就是从这里开始,根据ComponentScan配置的路径去加载需要spring管理的类。下面详细讲讲加载过程:
第一步,根据ComponentScan配置的路径去查找所有class文件,具体的方法在PathMatchingResourcePatternResolver#doRetrieveMatchingFiles,目的是扫描路径下每一个目录里的class文件。
第二步,过滤出使用了@Component注解的类,具体的方法在ClassPathScanningCandidateComponentProvider#scanCandidateComponents。
第三步,将第二步筛选出来的注册到bean工厂的注册表缓存中,具体的方法在ClassPathBeanDefinitionScanner#doScan
第四步,加载类里面的@Bean注解信息,并存放在配置缓存configurationClasses中,具体的方法在ConfigurationClassParser#processConfigurationClass
第五步,将第四步加载的@Bean信息注册到bean工厂的注册表缓存里,具体方法在
ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForBeanMethod
第六步,在refreshContext方法里有个finishBeanFactoryInitialization方法,在里面找到DefaultListableBeanFactory#preInstantiateSingletons方法,这里bean工厂将所有注册的bean都生成了实例。
bean工厂生成bean实例的步骤可以参考下面的文章
Spring Bean的生命周期: https://www.cnblogs.com/zrtqsk/p/3735273.html
spring boot 注解记录
@EnableConfigurationProperties
使被@ConfigurationProperties 注解的类生效。效果和在@ConfigurationProperties 注解的类上加@component注解相同。
@import
加载的资源扫描包之外的类
@Bean
需要在配置类中使用,即类上需要加上@Configuration注解,作用是将类注册为bean交由spring容器管理。
以上是关于Spring Boot是如何扫描和加载bean的的主要内容,如果未能解决你的问题,请参考以下文章