Spring容器的调用过程版权声明

原创
小哥 2年前 (2022-12-30) 阅读数 70 #大杂烩

1、Spring 容器高级视图
Spring 阅读启动时提供的应用程序。Bean配置信息,和Spring容器生成相应的Bean配置注册表,然后从此注册表实例化Bean,装配号Bean为上层应用程序提供就绪的运行环境。

2内部工作机制
该图描述了Spring容器从加载配置文件到创建完整的Bean操作流程:

1、ResourceLoader从存储介质加载Spring配置信息和使用Resource表示此配置文件的资源;

2、BeanDefinitionReader读取Resource然后解析配置文件。每个配置文件解析为BeanDefinition对象并保存到BeanDefinitionRegistry中;

3.容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java反射机制自动识别Bean工厂后处理后处理装置(已实现BeanFactoryPostProcessor接口)的Bean然后给这些打电话Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition处理。主要完成以下两项任务:

1)解析用于占位符的元素标记以获得最终配置值,这意味着一些半成品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。

Spring这个容器确实是一个精密设计的机器,里面有许多部件和装置。Spring聪明的是,它使用许多接口为所有设备绘制蓝图,并很好地构建它们。Spring骨架,然后通过继承体系层层演绎,不断丰富,最后让。Spring成为一个完整的血肉框架。所以检查一下Spring框架的源代码,有两个明显可见的脉络:

1)接口层描述了容器的重要组件以及组件之间的协作关系;

2)继承系统逐渐实现组件的功能。

界面层轮廓清晰Spring框架的高级功能,框架的背景已经准备就绪。通过对接口层的抽象描述Spring您可以自己提供特定的实现,任何第三方组织也可以提供不同的实现, 可以说Spring完美的接口层确保了框架的可扩展性。垂直继承系统的逐步扩展逐步实现了框架的功能。这种实现方案确保了框架的功能不会在某些类上累积,导致过度的代码逻辑负载,并且框架的复杂性被完美分解。

Spring组件可根据其角色分为两类:

1)材料组件:Resource、BeanDefinition、PropertyEditor还有决赛Bean它们是在加工过程中加工和消耗的部件,就像在流水线上加工的材料一样;

22) 加工设备组件:ResourceLoader、BeanDefinitionReader、BeanFactoryPostProcessor、InstantiationStrategy以及BeanWrapper这样的部件就像装配线不同环节的加工设备,用于加工材料部件。

Spring何时实例化bean,首先分割2种情况
第一:如果您使用BeanFactory作为Spring Bean工厂级,然后所有bean这是第一次使用。Bean实例化时
第二:如果您使用ApplicationContext作为Spring Bean工厂类别分为以下情况:
(1):如果bean的scope是singleton的,并且lazy-init为false(默认是false,因此无法设置),然后ApplicationContext实例化Bean并将实例化Bean放在一个map结构,下次使用时Bean当,直接从此缓存
(2):如果bean的scope是singleton的,并且lazy-init为true,则该Bean的实例化是您第一次使用它。Bean实例化时
(3):如果bean的scope是prototype的,则该Bean的实例化是您第一次使用它。Bean实例化时

在我的工程中Demo在,通过ClassPathXmlApplicationContext获取xml属于因此,通过ApplicationContext获取bean其默认值BeanFactory是DefaultListableBeanFactory。

spring容器的初始化过程如下图所示:参见具体过程。
https://blog.csdn.net/weililansehudiefei/article/details/74178427


作者:宇宙意志
来源:CSDN
原文:https://blog.csdn.net/qq\_39632561/article/details/83070140
版权声明:本文为博主原创文章,转载请附上博客链接!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门