我们先看看这个方法的轮廓流程
这个getbean的轮廓方法很长.
先分两种情况:
一种是在缓存实例中能拿到bean, (主要是factroyBean的处理, 执行所有已注册的 BeanPostProcessor 的 postProcessAfterInitialization 方法)
前边是校验 (如果name以“&”为前缀,但是beanInstance不是FactoryBean,则抛异常) 通过之后是从缓存中获取到factroyBean的实例
从factroyBean中获取实例
执行所有已注册的 BeanPostProcessor 的 postProcessAfterInitialization 方法 -> object = postProcessObjectFromFactoryBean(object, beanName);
另一种是拿不到
1.先判断如果是要创建这个bean会把beanName缓存到alreadyCreated 中
2.根据beanName 拿到 MergedBeanDefinition
3.拿到当前bean所依赖的beanName集合,实例化自己之前先要实例化自己依赖的bean
3.1检查是否存在循环依赖,有则抛异常
3.2将两者依赖关系注册到缓存中
3.3先实例化依赖bean
接下来分3中类型实例化bean
4.1单例类型
beforeSingletonCreation 吧正在实例化的bean添加到容器中 创建完成后这个方法afterSingletonCreation 吧从正在创建实例化容器中将beanName移除
4.2原型类型
4.3其他类型













