【Spring】—— IoC 之加载 Bean:创建 Bean(六)之初始化 Bean 对象
一个 bean 经历了 #createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) 方法,被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。
一个 bean 经历了 #createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) 方法,被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。
这篇分析 #doCreateBean(...) 方法的第三个过程:循环依赖处理。其实,循环依赖并不仅仅只是在 #doCreateBean(...) 方法中处理,而是在整个加载 bean 的过程中都有涉及。
#doCreateBean(...) 方法,主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程。
#createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) 方法,用于实例化 Bean 对象。
这篇我们关注创建 bean 过程中的第一个步骤:实例化 bean,对应的方法为 #createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args)
在上篇博客 《【 Spring】—— IoC 之加载 Bean:分析各 scope 的 Bean 创建》 中,有一个核心方法没有讲到, #createBean(String beanName, RootBeanDefinition mbd, Object[] args) 方法。
在 Spring 中存在着不同的 scope,默认是 singleton ,还有 prototype、request 等等其他的 scope
如果从单例缓存中没有获取到单例 Bean 对象,则说明两种两种情况。
从这篇博客开始我们开始加载 Bean 的第一个步骤,从缓存中获取 Bean 。
Spring IoC 容器所起的作用如上图所示,它会以某种方式加载 Configuration Metadata,将其解析注册到容器内部,然后回根据这些信息绑定整个系统的对象,最终组装成一个可用的基于轻量级容器的应用系统。