【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.mzph.cn/news/11076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选择低代码/零代码平台(最全平台总结)

来谈论这个问题之前,我们先来看看到底什么是低代码/零代码—— 低代码 对于“低代码”的宣传其实已经很久很广泛了,但是争议从来都没有停止。 忘记之前在哪里看到过一个“低代码将会取代程序员”之类的说法,觉得很好笑,看了一些…

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 在【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值一文中介绍了如何利用…

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现: 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病)已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…

opencv-18 什么是色彩空间?

1.什么是色彩空间类型? 色彩空间类型,也称为颜色空间类型或色彩模型,是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中,有许多种色彩空间类型,每种类型有不同的表达方式和特点。 常见的色彩空间类型包括&a…

maven

一、为什么需要使用maven 如今我们构建一个项目需要用到很多第三方的类库 ,例如我们在开发项目中 需要引入 这些依赖jar包 一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系非常复杂,一个Jar包往往又会引用其他Jar包&#x…

flex 弹性布局学习

一.Flex布局: Flex是Flexible Box 缩写“弹性布局”,用来为盒状模型提供最大得灵活性。 任何一个容器都可以指定为 Flex 布局。 .box{display: flex; } 行内元素也可以使用 Flex 布局。 .box{display: inline-flex; } Webkit 内核的浏览器,必须加上-webkit前缀。…

微服务模式:业务服务模式

无论是单体应用还是微服务,构建企业应用的业务逻辑/服务在更多方面上都有相似之处而不是差异。在两种方法中,都包含服务、实体、仓库等类。然而,也会发现一些明显的区别。在本文中,我将试图以概念性的方式强调这些区别&#xff0c…

火山引擎VeDI最新分享:消费行业的数据飞轮从“四更”开始

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 数据飞轮,正在为消费行业的数字化升级提供一套全新模式。 在刚刚结束的《全链路增长:数据飞轮转动消费新生力》专场活动上,火山引…

MySQL 8.0详细安装配置教程

一. 前言 MySQL是目前最为流行的开源数据库产品,是完全网络化跨平台的关系型数据库系统。它起初是由瑞典MySQLAB公司开发,后来被Oracle公司收购,目前属于Oracle公司。因为开源,所以任何人都能从官网免费下载MySQL软件&#xff0c…

SSIS对SQL Server向Mysql数据转发表数据 (二)

1、在SQL Server数据库创建一个数据库表:users USE [Test1] GO/****** Object: Table [dbo].[users] Script Date: 2023/7/27 16:25:11 ******/ SET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOCREATE TABLE [dbo].[users]([id] [int] IDENTITY(1,1) NOT NUL…

一些有意思的人工智能发展状况数据

随着大型语言模型(LLM)的引入,机器学习(ML)和人工智能(AI)首次被日常开发人员所使用。这些令人感觉很神奇的应用程序,甚至是拥有数十亿研发支出的,在以前连大型科技公司几…

Vue2基础七、refnextTick自定义指令

零、文章目录 Vue2基础七、ref&nextTick&自定义指令 1、ref **作用:**利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例**特点:**查找范围 → 当前组件内 (更精确稳定),用document.querySelect(‘.box’) 获取的是整个页面…

nacos安装与基础配置

源码 https://github.com/alibaba/nacos https://gitee.com/mirrors/Nacos 编译 git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skiptrue clean install -U ls -al distribution/target/// change the $version to your ac…

【数据结构】实验八:树

实验八 树 一、实验目的与要求 1)理解树的定义; 2)掌握树的存储方式及基于存储结构的基本操作实现; 二、 实验内容 题目一:采用树的双亲表示法根据输入实现以下树的存储,并实现输入给定结点的双亲结点…

基于罪名法务智能知识图谱(含码源):基于280万罪名预测、20W法务问答与法律资讯问答功能

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

如何构建适合自己的DevOps软件测试改进方案

​目录 DevOps成熟度模型分析 构建适合企业自身性能的测试过程改进框架 资料获取方法 根据2022年的DevOps全球调查报告显示,主流软件企业采用或部分采用DevOps且已获得良好成效的占比已达70%,DevOps俨然成为当下软件开发研究的重要方向。 测试作为软…

uni-app 微信小程序:启用组件按需注入

uni-app 微信小程序:启用组件按需注入 文章目录 uni-app 微信小程序:启用组件按需注入一、官方文档按需注入注意事项 二、HBuilder X 设置三、效果 一、官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html 按…

内存泄漏是什么?有什么危害

内存泄漏是什么?有什么危害 1. 前言1.内存泄漏是什么?2. 为什么会发生内存泄漏3. 内存泄漏的危害4. 总结 1. 前言 在各种项目开发中,内存泄漏是一个很严重的问题。对资源管理、性能优越、系统稳定性,以及是否安全产生极大印象。本…

CCD光斑图像质量分析仪的作用和工作原理

激光光斑的成型在激光加工中起着至关重要的作用,在实际加工中激光可以被变换成各种形状以满足加工需求,激光光斑的形状大致可以被分为四种:矩形、环形、椭圆形、线形。矩形的激光光斑适用于激光切割、激光焊接,环形的激光光斑适用…

【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理(Natural Language Processing,简称NLP&…