前言:
这篇文章并不是真正的关于Spring中Bean的初始化过程的详细介绍,只是简单介绍,在介绍Spring设计模式的文章中因为需要,链接到这篇文章,对bean的初始化过程简单说明。
bean容器的启动:
- 读取bean的xml配置文件或者解析特定注解的类,将bean元素转换成BeanDefinition对象(BeanDefinition对象存储了bean对象的所有特征,是否单例,是否懒加载,factoryBeanName等)
- 通过DeanDefinitionRegistry将这些bean注册到beanFactory中,保存在它的一个concurrentHashMap中
- 将BeanDefinition注册到beanFactory之后,在这里提供了一个扩展接口,允许我们通过实现接口BeanFactoryPostProcessor在此处插入我们定义的代码。典型的例子就是PropertyPlaceholderConfigurer,我们一般在配置数据库dataSource时使用的占位符的值,就是它注入进去的。
容器中bean的实例化阶段:
- 实例化阶段主要是通过反射或者CGLIB对bean进行实例化,在spring中给我们暴露了很多接口,我们只用实现接口就可以对bean实例化功能进行扩展。