BeanDefinition
这里创建bean工厂,同时生成所有注册类的BeanDefinition,后面通过扫描它来生成bean。

BeanFactoryPostProcessor
BeanDefinition可以在这里被修改,可能会有多个处理器,来修改BeanDefinition。
例如:PropertyPlaceholderConfigurer,处理站位符的bean,会扫描BeanDefinition,将占位符转换为对应的值。

BeanPostProcessor
这里会注册所有的实现了BeanPostProcessor接口的类,他们都是bean后处理器。他们会在下面初始化本的时候调用。

InitializingBean、FactoryBean、普通bean
这一步是最核心的,我们使用的bean都是在这被创建的(一些特殊的bean会在上面过程创建)。
-
InitializingBean
实现此接口的bean会在初始化的时候调用 afterPropertiesSet 方法,一般需要初始化其他数据的时候会在这里写方法。 -
FactoryBean
对bean new过程有特殊要求时会实现这个接口,调用 getObject 方法来 new 对象。不过调这个方法再new 的话速度比较慢,一般会实现InitializingBean,在初始化调用 afterPropertiesSet 的时候new 对象,最后 getObject 方法直接获取实例化的对象。

网友评论