spring IOC介绍

news2024/11/19 5:55:37

spring的Ioc真是个好东西啊,那它到底是什么东西呢,控制反转,到底是怎么转的呢?

假设啊你现在是一个导演,想排部戏,那是不是得需要演员和舞台(spring中的bean),如果按平常的编程思维就是new 一个actor,一个stage ,然后actor 开始perform。但如果你利用控制反转(Ioc),一开始,演员就自动给你送来了,不用去你找也不用你去new,演员表演需要舞台,这个时候舞台也随着演员一起出现了,这个称为依赖注入(DI)。

接下来我们来看看一个Bean是从注册到使用走过了一个什么历程。

首先我们认识下spring容器,BeanFactory和ApplicationContext,由于后者是建立在前者之上的,我们先看前者。它有个BeanFactory接口,定义了如何访问管理容器内的Bean方法。还有个BeanDefinitionRegistry接口,专门管理Bean的注册,配置。默认一个DefaultListableBeanFactory实现了上述两接口。而Bean的注册信息即BeanDefinition可通过bindViaCode方法来自行编码完成注册,也可分别通过bindViaproperties或bindViaXml方法利用BeanDefinitionReader来载入properties文件或xml配置文件注册。现在最常用的就是通过xml文件来配置,可用Setter方法注入或构造方法注入(点击查看:Spring Ioc的一个Demo)。

当注册好Bean之后,就等着容器启动还有调用啦。如果用的是BeanFatory容器,那它默认是延迟加载实例化Bean的,即当你用到这个Bean时它才帮你实例化了送过来;如果用的是ApplicationContext容器,那是可容器一启动即实例化所有的Bean的。

从Bean的实例化到准备就绪等待使用中间还要走好常的路呢,首先容器启动的时候,有时我们还需要对配置文件做一些处理,如${jdbc.passwd}此类占位符的二次加载啊还有其他对配置文件的再处理的,我们会用到BeanFactoryPostProcessor,然后Bean实例化后并不马上成为就绪状态,这时候BeanWrapper会对其包裹返回一个BeanWrapper实例,下阶段是设置初始属性值,接下来就是Aware接口,依赖注入就是靠这个实现啦,它要检查是否还有需要其他Bean的注入,之后进入关键的BeanPostProcessor处理,为什么说是关键的呢,因为在这个阶段会做一些诸如生成代理的行为,Spring AOP(点击查看:Spring Aop 原理总结)就靠它了,还有初始化方法啊都在这里。总之,就是一个本来很纯净的Bean,我们将我们所需要的东西都加工上去,最后返回它的一个代理。

自此一个Bean从注册到诞生准备做贡献的过程就是这样了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294658.html

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

相关文章

在linux上如何运用虚拟数据优化器VDO

本章主要介绍虚拟化数据优化器。 什么是虚拟数据优化器VDO 创建VDO设备以节约硬盘空间 16.1 了解什么是VDO VDO全称是Virtual Data Optimize(虚拟数据优化),主要是为了节省硬盘空间。 现在假设有两个文件file1和 file2,大小都是10G。file…

如何正确使用网管工业交换机

工业交换机是一种专为满足工业应用需求而设计的通讯设备。它具备工业级品质,如耐受高温和低温的能力,能够抵御振动、防雷和防尘。此外,工业交换机还集成了多种丰富的协议,包括路由、交换和安全功能。根据是否可进行“网络管理”的…

下跌中寻求上涨,昂首资本根据交易量预判牛市

各位投资者你是不是也害怕熊市,担心在熊市中被套,但是投资者你知道吗?专业的投资者难道在熊市中就不会交易吗?昂首资本肯定的告诉你,肯定是交易的,并且常常还是以盈利结束交易。其实我们投资者和专业高手的…

跨境企业必看,数据跨境传输相关要求详解

对于跨境企业而言,数据的跨境传输既是业务拓展、竞争力提升、运营效率优化的重要手段,也是全球化发展和国际合作的必要条件。然而,这一过程伴随着法律差异、技术难题等多重挑战,企业需要谨慎应对,确保数据的安全、合规…

深入理解Dubbo-2.Dubbo功能之高级特性分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

用虚拟信用卡绑定直接支付 (Google play账号绑定教程)

虚拟信用卡的用途十分广泛,可用于购买应用,游戏内购、谷歌商店以及自己账号的充值,对于喜欢外服游戏的小伙伴来说,学会使用谷歌商店绑定虚拟信用卡是十分重要的。谷歌账号如何绑定信用卡呢?谷歌商店如何充值&#xff1…

各大厂商证书申请遇到的问题

证书作用: 确保数据传输过程中不被篡改、拦截 遭受中间件攻击、确保数据完整性、保密性 申请方式: 文件验证、cname验证(需要在域名平台上添加cname记录) 本次采用文本验证 添加需要申请的域名 将tx生成的txt文件放在 IIS站点…

空中“千里眼” 复亚环保监测无人机助力生态保护

生态环境保护是全球共同关注的重要议题,为了持续改善环境、加强执法效能,复亚智能环保监测无人机在环保领域大显身手。该智能系统为环境执法人员提供了全新的工具,使其能够在无人机的“千里眼”下,及时发现和制止环境违法行为&…

表单小程序作用体现在哪

表单的用途非常广泛,它是线上收集信息或用户预约/需求服务的重要方式,对商家来说如今线上平台非常多,生意开展的形式也越来越多,比如常见的预约、报名、收款、产品支付等都可以通过表单实现。 接下来啊让我们看看通过【雨科】平台…

一文详解大模型归因机制,幻觉问题有救了!

作者 | 谢年年、python 大模型的幻觉问题一直是一个亟待解决的挑战。由于大模型的训练语料来源广泛,且都是未经筛选的现实世界文本,预训练的目标也仅在于预测下一个单词,并未对生成内容的真实性进行建模和验证,这导致了大模型幻觉…

基于SuperMap iObjects Java生成地图瓦片

作者:dongyx 前言 在GIS领域,地图瓦片技术作为GIS领域的关键技术,是提高地图服务性能的关键手段之一。通过预先生成地图的瓦片数据,可以显著提升用户访问地图时的响应速度和体验。SuperMap iObjects for Java作为一款强大的GIS开…

浏览器渲染页面的过程以及原理

什么是浏览器渲染 简单来说,就是将HTML字符串 —> 像素信息 渲染时间点 浏览器什么时候开始渲染? 网络线程发送请求,取回HTML封装为渲染任务并将其传递给渲染主线程的消息队列。 问题:只取回HTML吗?那CSS和JS呢&am…

帆软认证FCRP第二题

【题目要求】 数据库中有一张地区数据统计表,但是并不规则 ,记录类似于,225100:02:3:20160725是一串代码,以:分割,第1位为地区代码,第2位为分类代码,第3位为数量,第4位为…

Leetcode—901.股票价格跨度【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—901.股票价格跨度 算法思想 实现代码 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

[网鼎杯 2020 朱雀组]phpweb1

提示 call_user_func()函数先通过php内置函数来进行代码审计绕过system&#xff08;##不止一种方法&#xff09; 拿到题目养成一个好的习惯先抓个包 从抓到的包以及它首页的报错来看&#xff0c;这里死活会post传输两个参数func以及p func传输函数&#xff0c;而p则是传输参数的…

关于前端原生技术-Jsonp的理解与简述

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/134777717 出自【进步*于辰的博客】 在学习了Jsoup这个知识点之后&#xff0c;发觉js的这一特点…

2、Redis变慢原因排查(下)

感觉Redis变慢了&#xff0c;这些可能的原因你查了没 &#xff1f;(下) Redis变慢排查的上一篇【感觉Redis变慢了&#xff0c;这些可能的原因你查了没 &#xff1f;(上)】&#xff0c;我们是基于Redis命令为入口&#xff0c;比如命令使用不得当&#xff0c;bigkey问题&#xf…

Vue3组件使用问题

Vue3组件学习 文章目录 Vue3组件学习一、Message 全局提示组件返回数据换行问题二、DatePicker 日期选择框组件限制选定年份问题 一、Message 全局提示组件返回数据换行问题 问题&#xff1a;使用中发现仅仅通过写入\n或<br/>&#xff0c;无法实现回车显示的结果。 解决…

网站高性能架构设计——web前端与池化

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、高性能浏览器访问 1.减少HTTP请求 HTTP协议是无状态的应用层协议&#xff0c;也就是说每次HTTP请求都需要建立通信链路、进行数据传输&#xf…

Swagger Array 逐步解密:带你简化开发工作

Swagger 允许开发者定义 API 的路径、请求参数、响应和其他相关信息&#xff0c;以便生成可读性较高的文档和自动生成客户端代码。而 Array &#xff08;数组&#xff09;是一种常见的数据结构&#xff0c;用于存储和组织多个相同类型的数据元素。数组可以有不同的维度和大小&a…