Spring IOC
中涉及的重要接口BeanDefinition
Bean
的描述信息,实现类包括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创建的细节解读。