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

【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. 过期自动清理/自动配置清理
http://www.lryc.cn/news/100670.html

相关文章:

  • AI加速游戏开发 亚马逊云科技适配3大场景,打造下一代游戏体验
  • C++ | 继承(基类,父类,超类),(派生类,子类)
  • Commands Of Hadoop
  • SQL-每日一题【620.有趣的电影】
  • linux 精华总结
  • Eureka 学习笔记2:客户端 DiscoveryClient
  • okhttp原理分析
  • freeswitch的mod_xml_curl模块
  • 高速数据采集专家-FMC140【产品手册】
  • 【SSM】知识集锦
  • Flowable-中间事件-信号中间抛出事件
  • 【算法基础:动态规划】5.3 计数类DP(整数拆分、分拆数)
  • 封装(Encapsulation)
  • php 原型模式
  • LiveGBS流媒体平台GB/T28181功能-支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放
  • 6、Nginx实现反向代理
  • Leetcode——404 左叶子之和
  • R并行计算-parallel例子1
  • JavaSE复盘2
  • 如何在3ds max中创建可用于真人场景的巨型机器人:第 3 部分
  • Android性能优化之游戏引擎初始化ANR
  • Jmap-JVM(十六)
  • 【分布式能源的选址与定容】基于多目标粒子群算法分布式电源选址定容规划研究(Matlab代码实现)
  • flink源码分析-获取JVM最大堆内存
  • 第17节 R语言分析:生物统计数据集 R 编码分析和绘图
  • 一文了解什么是Selenium自动化测试?
  • java接口实现
  • 数据结构入门指南:链表(新手避坑指南)
  • SpringBoot第24讲:SpringBoot集成MySQL - MyBatis XML方式
  • linux 查看网卡,网络情况