先把别名解析为实际名称,再进行后续处理
若要FactoryBean本身,需要使用&名称获取
singletonObjects是一级缓存,放单例成品对象
singletonFactories是三级缓存,放单例工厂
earlySingletonObjects是二级缓存,放单例工厂的产品,可称为提前单例对象
阶段2:处理父子容器1.父子容器的bean名称可以重复
2.优先找子容器的bean,找到了直接返回,找不到继续到父容器找
阶段3: dependsOndependson用在非显式依赖的bean的创建顺序控制
阶段4:按Scope创建beanscope理解为从xxx范围内找这个bean更加贴切
singleton scope表示从单例池范围内获取bean,如果没有,则创建并放入单例池
prototype scope表示从不缓存bean,每次都创建新的
request scope表示从request对象范围内获取 bean,如果没有,则创建并放入request …
阶段5:创建bean 阶段5-1:创建bean 实例 AutowiredAnnotationBeanPostProcessor选择构造优先选择带@Autowired注解的构造·若有唯一的带参构造,也会入选
采用默认构造如果上面的后处理器和BeanDefiniation都没找到构造,采用默认构造,即使是私有的
阶段5-2:依赖注入优先级高到低:按照精确匹配,按照名字匹配,按照类型自动匹配。
阶段5-3:初始化 阶段5-4:注册可销毁bean 判断依据如果实现了DisposableBean或AutoCloseable接口,则为可销毁bean
如果自定义了destroyMethod,则为可销毁bean
如果采用@Bean没有指定destroyMethod,则采用自动推断方式获取销毁方法名(close,shutdown)
如果有@PreDestroy标注的方法
存储位置singleton scope的可销毁bean会存储于beanFactory的成员当中
自定义scope的可销毁bean会存储于对应的域对象当中
prototype scope不会存储,需要自己找到此对象销毁
存储时都会封装为 DisposableBeanAdapter类型对销毁方法的调用进行适配 阶段6:类型转换 阶段7:销毁bean欢迎分享,转载请注明来源:内存溢出
评论列表(0条)