Spring Bean生命周期

Java99

本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.22

1. Bean扫描

本小节介绍的是Spring从给定的扫描位置扫描到待加载的Bean,生成BeanDefinitionMap的过程

SpringBoot启动过程中使用的ApplicationContext是 AnnotationConfigApplicationContext,而它初始化的时候会顺带初始化两个 BeanDefinitionReaderAnnotatedBeanDefinitionReaderClassPathBeanDefinitionScanner,前者是可以直接通过给定的class注册Bean,后者则可以扫描给定目录下所有的目标Bean,下面着重介绍后者扫描Bean组件的过程。

ClassPathBeanDefinitionScanner扫描的入口是public int scan(String... basePackages),而真正做事情的是protected Set

下面将以上部分代码展开去讲

即对应 findCandidateComponents方法的操作,该方法如下:

  • 首先来判断是否有对应的索引,即看 componentsIndex是否有值,它加载的是 META-INF/spring.components中的信息,内容格式如下:
com.sgw.demo=org.springframework.stereotype.Component
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长