当前位置: 首页 > news >正文

【Spring IoC容器的加载过程】

  1. 加载配置文件

Spring IoC容器的配置通常以XML形式存储,并通过ResourceLoader和XmlBeanDefinitionReader类来加载。ResourceLoader主要负责加载Bean配置文件,而XmlBeanDefinitionReader则负责解析这些文件,将Bean定义封装为BeanDefinition对象。

  1. 解析和注册BeanDefinition

在加载配置文件后,XmlBeanDefinitionReader会使用BeanDefinitionParserDelegate类来解析文件中的Bean定义,并将其封装为BeanDefinition对象。这些对象会被注册到BeanDefinitionRegistry中,BeanDefinitionRegistry是一个接口,提供了向IoC容器中注册BeanDefinition的方法。

  1. 初始化BeanDefinition

在加载和解析BeanDefinition后,XmlBeanDefinitionReader会调用BeanDefinition的postProcessBeanDefinition方法,对BeanDefinition进行进一步处理。这个方法主要用于处理继承关系、AOP、注解等。例如,在处理注解时,会通过AnnotationConfigUtils类加载配置类,并向容器中注册BeanDefinition,解析其中的注解配置信息。

  1. 加载Bean

Spring IoC容器中的Bean是延迟加载的,只有在需要使用时才会被实例化。这个过程是通过Bean的getBean方法实现的。getBean方法根据Bean的名称或类型查找BeanDefinition,然后通过Bean工厂创建Bean实例。Bean工厂主要有两种:DefaultListableBeanFactory和XmlWebApplicationContext。在创建Bean实例时,DefaultListableBeanFactory会根据Bean的作用域创建对应数量的实例。Bean的作用域通常有singleton、prototype、request、session和global session等。

  1. 填充Bean属性

创建Bean实例后,Spring IoC容器会通过BeanPostProcessor接口中的postProcessPropertyValues方法来对Bean的属性进行填充。这个过程是通过PropertyValues封装Bean的属性,然后使用依赖注入技术自动填充。

  1. 初始化Bean

填充完Bean的属性后,Spring IoC容器会使用BeanPostProcessor中的postProcessBeforeInitialization方法对Bean进行预处理。然后再使用InitializingBean接口中的afterPropertiesSet方法或者配置文件中指定的init-method方法来初始化Bean。

  1. 销毁Bean

销毁Bean是Spring IoC容器的最后一个步骤,在销毁时使用DisposableBean接口中的destroy方法或者配置文件中指定的destroy-method方法来进行。

http://www.lryc.cn/news/160439.html

相关文章:

  • C++多文件类的声明与实现
  • 16 “count(*)“ 和 “count(1)“ 和 “count(field1)“ 的差异
  • 【云原生进阶之PaaS中间件】第一章Redis-1.4过期策略
  • windows弹出交互式服务检测一键取消bat脚本
  • 接口使用的最佳时机
  • freertos之任务运行时间统计实验
  • Js中一些数组常用API总结
  • LlamaIndex:将个人数据添加到LLM
  • Mojo 摸脚语言,似乎已经可以安装
  • Spark 6:Spark SQL DataFrame
  • 区块链智能合约编程语言 Solidity
  • 将SSL证书设置成HTTPS的详细步骤
  • 43、Flink之Hive 读写及详细验证示例
  • 2023数模国赛C 题 蔬菜类商品的自动定价与补货决策-完整版创新多思路详解(含代码)
  • javaScript:DOM中常用尺寸
  • 决策树算法学习笔记
  • Verilog_mode常用的几个用法
  • MySQL之MHA高可用配置及故障切换
  • java实现状态模式
  • Selling a Menagerie(cf)
  • python-55-打包exe执行
  • linux并发服务器 —— IO多路复用(八)
  • 企微SCRM营销平台MarketGo-ChatGPT助力私域运营
  • linux C++ 海康截图Demo
  • MySQL的事务隔离级别
  • 企业大语言模型智能问答的底层基础数据知识库如何搭建?
  • 【腾讯云 Cloud Studio 实战训练营】使用python爬虫和数据可视化对比“泸州老窖和五粮液4年内股票变化”
  • Linux之Shell概述
  • 手写Spring:第2章-创建简单的Bean容器
  • 在Windows上通过SSH公私钥实现无密码登录Linux