Spring容器高级主题

本文详细介绍了Spring容器启动过程中的关键步骤,包括BeanFactory初始化、Bean后处理器注册、消息源及事件广播器初始化等,揭示了Spring框架的核心机制。

5.1 Spring容器技术内幕

5.1.1 内部工作机制

Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义了Spring容器在加载配置文件后的各项处理过程,这些处理清晰刻画了Spring容器启动时所执行的各项操作。

代码清单 AbstractApplicationContext#refresh()

//1初始化BeanFactory

ConfigurableListableBeanFactory beanFactory = getBeanFactory();

...
//2调用工厂后处理器
invokeBeanFactoryPostProcessors();
//3注册Bean后处理器
registerBeanPostProcessors();
//4初始化消息源
initMessageSource();
//5初始化应用上下文事件广播器
initApplicationEventMulticaster();
//6初始化其他特殊的Bean:由具体子类实现
onRefresh();
//7注册事件监听器
registerListeners();
//8初始化所有单实例的Bean,使用懒汉模式的Bean除外
finishBeanFactoryInitialization(beanFactory);
//9完成刷新并发布容器刷新事件
finishRefresh();

1、初始化BeanFactory:根据配置文件实例化BeanFactory,getBeanFactory()方法由具体子类实现。这一步,Spring将配置文件信息装入容器的Bean定义注册表(BeanDefinitionRegistry)中,此时Bean还未初始化。

2、调用工厂后处理器:根据反射机制从BeanDefinitionRegistry中找出所有BeanFactoryPostProcessor类型的Bean,并调用其postProcessBeanFactory()接口方法;

3、注册Bean后处理:根据反射机制从BeanDefinitionRegistry中找出所有BeanPostProcessor类型的Bean,并将他们注册到容器Bean后处理的注册表中;

4、初始化消息源:初始化容器的国际化消息资源;

5、初始化应用上下文事件广播器;

6、初始化其他特殊的Bean:这是一个钩子方法,子类可以借助这个方法执行一些特殊操作:如AbstractRefreshableWebApplicationContext就使用该方法执行初始化ThemeSource的操作;

7、注册事件监听器;

8、初始化所有单实例的Bean,使用懒汉模式的Bean除外:初始化Bean后,将他们放入Spring容器的缓存中;

9、发布上下文刷新事件:创建上下文刷新事件,事件广播器负责将这些事件广播到每个注册的事件监听器中。


1、ResourceLoader从存储介质中加载Spring配置信息,并使用Resource表示这个配置文件的资源;

2、BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件。配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中;

3、容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理,主要完成两项工作:

1)对使用占位符的<bean>元素标签进行解析,得到最终配置值,意味着对一些半成品的BeanDefinition对象进行加工处理并得到成品的BeanDefinition对象;

2)对BeanDefinitionRegistry中的BeanDefinition进行扫描,通过Java反射机制找出所有属性编辑器的Bean(实现java.beans.PropertyEditor接口的Bean),并自动将他们注册到Spring容器的属性编辑器注册表中(PropertyEditorRegistry);

4、Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用InstantiationStrategy着手进行Bean实例化的工作;

5、在实例化Bean时,Spring容器使用BeanWrapper对Bean进行封装,BeanWrapper提供很多以Java反射机制操作Bean的方法,将结合该Bean的BeanDefinition以及容器中属性编辑器,完成Bean属性的设置工作;

6、利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。

内容概要:本文档详细介绍了UC25IQ64型号的64M-bit串行多I/O闪存芯片的技术规格与操作特性。该芯片支持标准SPI、Dual/Quad SPI以及QPI接口,具备多种高性能数据传输模式,包括最高达532Mbits/s的Quad I/O数据传输速率。文档涵盖了器件的引脚定义、存储结构、工作模式、命令集、状态寄存器配置、数据保护机制、电气特性和封装信息,重点描述了各种读写、擦除、编程指令的操作流程与时序要求,并提供了详细的AC/DC参数表和封装尺寸。此外,还介绍了低功耗管理模式、安全特性如唯一ID和安全寄存器、以及高级功能如连续读取模式和双倍传输速率(DTR)等。; 适合人群:电子工程技术人员、嵌入式系统开发者、硬件设计工程师以及从事存储器应用开发的相关专业人员。; 使用场景及目标:①用于需要高可靠性、低功耗、高速数据访问的嵌入式系统中作为程序或数据存储介质;②适用于工业控制、物联网设备、消费类电子产品等领域中的代码执行(XIP)和数据存储需求;③支持多种SPI模式和QPI协议,便于在不同主控平台上进行灵活集成与优化性能。; 其他说明:本产品为南京优存科技有限公司出品,具备10万次编程/擦除周期和20年以上数据保持能力,工作电压范围为2.7V至3.6V,无需额外高压编程电源。建议用户在设计时参考完整的电气特性与时序图表,确保信号完整性与稳定性。更多技术支持请联系厂家提供的联系方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值