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
的生命周期
- 首先通过BeanDefinitionReader将xml中的Bean配置加载到BeanDefinition中
- 然后将BeanDefinition放入DefaultListableBeanFacotry的beanDefinitionMap和beanDefinitionNames集合中
- 然后调用BeanFactoryPostProcessor#postProcessorBeanFactory对容器中的BeanDefinition的属性进行增强解析
- 然后通过反射调用对象的构造函数进行对象的实例化
- 然后调用populateBean进行属性填充
- 然后调用初始化方法initializeBean,初始化时又会先调用invokeAwareMethods方法执行一堆的Aware方法
- 然后BeanPostProcessor#postProcessBeforeInitialization方法执行bean增强器的前置处理
- 然后调用InitializingBean#afterPropertiesSet方法或者是调用自定义的init-method方法
- 然后调用BeanPostProcessor#postProcessAfterInitialization方法执行bean增强的后置处理
- 最后完成Bean的创建,最终放入一级缓存singletonObjects中
整体流程大概就是这个,有了整体流程就可以进行下一步Bean创建的细节解读。
热门文章
- 宠物粮销售渠道策划方案 宠物粮销售渠道策划方案怎么写
- 猫咪注射疫苗要多少钱(猫***疫苗多少钱)
- 领养宠物合同怎么写(领养宠物的合同)
- Redis如何无锁应对并发访问及如何实现分布式锁
- 1月18日→18.7M/S|2025年最新免费节点Shadowrocket/V2ray/Clash/SSR订阅链接地址
- ASP.NET Core 在 IIS 下的两种部署模式详解
- 宠物领养平台论文答辩怎么写范文图片(宠物领养系统毕业设计)
- 动物疫苗上市公司排名榜最新名单(国内动物疫苗龙头企业)
- 延吉市动物卫生监督所电话(延吉市动物卫生监督所电话号码)
- 2月16日→21M/S|2025年最新免费节点Shadowrocket/Clash/V2ray/SSR订阅链接地址