spring 源码探索--创建bean实例和初始化
来源:互联网 发布:殷叶子演过的网络剧 编辑:程序博客网 时间:2024/06/18 12:32
创建bean
1.创建bean实例 createBeanInstance
使用各种实例化策略
2.将创建bean实例的工厂加入到缓存当中,用来检测循环依赖。在之前的《单例bean解析循环依赖》里面有详细介绍。
注入bean的依赖
populateBean
初始化bean.
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.class
在populateBean
处理完bean的依赖之后,开始执行 initializeBean
,
执行的流程:
1. 执行实现了BeanFactoryAware,BeanNameAware接口的方法setBeanFactory
2. 执行接口BeanPostProcessor的postProcessBeforeInitialization 初始化预处理方法
3. 再调用实现InitializingBean接口的afterPropertiesSet方法,自定义初始化方法init-method(xml中定义)
4. 执行接口BeanPostProcessor的postProcessAfterInitialization
在spring容器中,一般都是从容器中获取实例bean,如果想让bean获得spring的引用,那么就得使用ApplicationContextAware接口。让bean实现这个接口,实现setApplicationContext方法
private ApplicationContext context;public void setApplicationContext(ApplicationContext context){ this.context = context;}
这个setApplicationContext
方法是spring容器自动触发的,触发的时机是在什么时候呢?第一眼看到的时候,我也这样问自己。现在有答案了。
就是在postProcessBeforeInitialization
这个阶段执行的。
要在这个阶段执行的实例,首先是需要注册了一个ApplicationContextAwareProcessor
,
这个类继承了BeanPostProcessor
postProcessBeforeInitialization方法调用以下代码:
private void invokeAwareInterfaces(Object bean) { if (bean instanceof Aware) { ........... if (bean instanceof ApplicationContextAware) { ((ApplicationContextAware) bean).setApplicationContext(this.applicationContext); } } }
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
上面的代码是在AbstractBeanFactory中的refresh中的prepareBeanFactory方法中执行的。
- spring 源码探索--创建bean实例和初始化
- Spring源码分析4 — spring bean创建和初始化
- Spring源码分析3 — spring bean创建和初始化
- 创建和初始化bean
- spring 源码探索--bean加载准备阶段
- spring初始化和销毁bean
- spring bean初始化和销毁
- spring 源码探索 -- aop 标签解析和创建代理
- Spring源码解析之bean的创建和销毁
- Spring中Bean初始化实例【重要】
- spring初始化时实例化bean
- Spring IOC容器bean初始化源码分析
- spring源码学习 - 配置文件bean的初始化
- Spring之Bean容器初始化以及bean实例的获取
- spring实例化bean 源码 解读
- spring源码-3-bean实例化
- Spring工厂方式创建Bean实例
- Spring 工厂方式 创建bean实例
- ReactiveCocoa详解
- windows下硬盘安装centos
- adb命令记录
- Java设计模式(3)--代理模式
- 用HTML创建游戏中的元素用canvas~画方块~画圆:
- spring 源码探索--创建bean实例和初始化
- Linux进程间通信——使用信号
- js跨域的一些解决方法
- seekbar的简单使用
- LBP(三)
- PAT A1051
- 米斯特白帽培训讲义 漏洞篇 XSS
- 安卓耗时操作-异步任务之 AsyncTask
- android中直播接受的一方