Spring IOC 中涉及的重要接口BeanDefinitionBean的描述信息,实现类包括RootBeanDefinition 和GenericBeanDefinition,Bean的描述信息中定义了一系列Bean的信息,比如:beanClassName、scope、lazyinit、dependsOn、primary、initMethodName、destroyMethodName、isSington、isAbstract等信息。
BeanDefinitionReader
用于解析Bean的资源阅读器,比如针对于XML文件的配置的Bean,实现类XmlBeanDefinitionReader,针对properties文件的配置的Bean,实现类为PropertiesBeanDefinitionReader,Spring在启动时会将xml文件通过loadBeanDefinitions方法进行解析。
BeanFactory
是IOC容器实现的顶层接口,默认的实现为DefaultListableBeanFactory,Spring Bean 的整个生命周期都是由DefaultListableBeanFactory去管理的,这个类非常的重要。
BeanFactoryPostProcessor
这个接口是BeanFactory的增强处理器,用于在Bean加载为BeanDefinition之后的扩展,比如实现类PlaceHolderConfigurerSupport 就是用来处理占位符解析的,当我在xml文件中配置jdbc信息的时候,通过是用${xxx.jdbUrl}这种方式配置数据库连接的时候,就是通过这个类来处理和解析的。
Aware
这个接口,他下面有一堆的子接口,比如BeanNameAware、ApplicationContextAware、BeanFactoryAware、EnvironmentAware等,可以通过实现这些接口完成ioc容器中特定信息的设置,比如EnvironmentAware,可以在Bean创建过程中设置环境信息到对应的Bean对象中,后期通过bean对象获取环境信息数据。
BeanPostProcessor
这个接口是Bean的增强处理器,用于在Bean进行初始化时调用init-method方法的前后进行增强,他有两个方法:postProcessBeforeInitialization和postProcessAfterInitialization,分别用于bean初始化方法init-method之前和之后调用,当然还可以进行很多扩展,比如aop就是通过postProcessAfterInitialization方法中去创建动态代理对象。
Spring Bean 的生命周期
整体流程大概就是这个,有了整体流程就可以进行下一步Bean创建的细节解读。