【Spring】IOC的原理

一、 IOC 的概念

Spring 的 IOC ,即控制反转,所谓控制反转 ------ 本来管理业务对象(bean)的操作是由我们程序员去做的,但是有了 Spring 核心容器后,这些 Bean 对象的创建和管理交给我们Spring容器去做了,也就是控制权由程序员变成了容器。Spring 通过 Java 语言的反射机制实现实例化 Bean ,并建立 Bean 之间的依赖关系。除此之外,Spring IOC 还提供 Bean 实例缓存,生命周期管理,Bean 实例代理等高级服务。

二、 高层视图

Spring 应用启动时,读取 Bean配置信息,在容器中生成注册表,然后根据注册表去实例化 Bean,再将实例化好的 Bean 放入 Spring 容器的 Bean 缓存池中,为上层应用程序使用。

三、 实现

BeanFactory 面向 Spring 本身, ApplicationContext 面向使用 Spring 框架的开发者。

BeanFactory

  1. BeanDefinitionRegistry 注册表

Spring 配置的每一个 Bean 通过 BeanDefination 表示,描述了 Bean 的配置信息,BeanDefinitionRegistry 提供了向容器中注册 BeanDefination 的方法。

  1. BeanFactory

getBean() 从容器中获取指定名称的 Bean

  • ListableBeanFactory : 提供访问容器 Bean 信息的方法
  • HierarchicalBeanFactory : 父子级联 ,实现子容器可以访问父容器的 Bean,但是父容器不能访问子容器的 Bean
  • ConfifurableBeanFactory : 增强了IOC容器的定制性。
  • SingletonBeanFactory : 允许运行时向容器中注册单例 Bean

ApplicationContext

ApplicationContext 由 BeanFactory 派生而来,提供了更多面向实际应用的功能

比如从类路径加载配置文件等 ...

四、 Bean 的作用域和生命周期

作用域

  • Singleton : 单例模式,全局只有一个对象,多线程下不安全
  • Prototype : 原型模式,在每次使用时创建,每个 Bean 有自己的属性和状态
  • Request : 一次 Request 中一个实例
  • Session
  • Global Session

生命周期

  1. 实例化
  2. IOC 依赖注入
  3. setBeanName
  4. BeanFactoryAware
  5. ApplicationContentAware
  6. 接口实现-初始化预处理
  7. 初始化方法
  8. postProcessAfterInitialization
  9. 过期自动清理/自动配置清理
相关推荐
悟空码字1 分钟前
三步搞定短信验证码!SpringBoot集成阿里云短信实战
java·spring boot·后端
码农爱学习2 分钟前
C语言结构体对齐是怎么计算
java·c语言·数据库
嘉然今天吃粑粑柑4 分钟前
Kafka vs RabbitMQ:从消费模型到使用场景的一次讲清
后端
肥肥今天也好看5 分钟前
Java 日期格式化陷阱:YYYY vs yyyy 导致的生产事故分析
后端
黎雁·泠崖6 分钟前
吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识(Java&C对比)
java·c语言·开发语言
用户948357016516 分钟前
可观测性落地:如何在 Java 项目中统一埋点 Trace ID?(一)
后端
天天摸鱼的java工程师6 分钟前
volatile 关键字底层原理:为什么它不能保证原子性?
java·后端
钟良堂6 分钟前
Java完整实现 MinIO 对象存储搭建+封装全套公共方法+断点上传功能
java·minio·断点上传
leikooo7 分钟前
SpringAI 多轮对话报错 400 Bad Request
后端·ai编程
linyb极客之路9 分钟前
告别 OpenFeign!Spring 6 原生 HttpExchange 微服务调用实战指南
spring boot·spring·spring cloud