bean容器的启动阶段
- 读取bean的xml配置文件或者对应注解的bean,将bean元素分别转换成BeanDefinition对象。
- 然后通过BeanDefinitionRegistry对象将这些bean注册到beanFactory中,保存在它的一个concurrentHashMap中。
- 将BeanDefinition注册到beanFactory后,在这里spring提供了一个扩展的切口,允许我们通过实现BeanFactoryPostProcessor接口来插入我们自定义的代码。
典型的例子:PropertyPlaceholderConfigurer,我们一般配置在数据库的dataSource时使用到的占位符的值,就是它注入进去的。
容器中bean的实例化阶段
实例化阶段主要是通过反射或者CGLIB对bean进行实例化,在这个阶段spring又给我们暴露了很多扩展点
- 各种Aware接口,比如BeanFactoryAware,对于实现Aware接口的bean,在实例化bean的时候Spring会帮我们注入对应的BeanFactory实例
- BeanPostProcessor接口,实现了BeanPostProcessor接口的bean,在实例化bean时Spring会帮我们调用接口中的方法。
- InitializingBean接口,实现了InitializingBean接口的bean,在实例化bean时Spring会帮我们调用接口中的方法
- DisposableBean,实现了DisposableBean接口的bean,在bean死亡时Spring会帮我们调用接口中的方法