spring IOC介绍

 

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.hqwc.cn/news/257916.html

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

相关文章

蓝牙物联网对接技术难点有哪些?

#物联网# 蓝牙物联网对接技术难点主要包括以下几个方面: 1、设备兼容性:蓝牙技术有多种版本和规格,如蓝牙4.0、蓝牙5.0等,不同版本之间的兼容性可能存在问题。同时,不同厂商生产的蓝牙设备也可能存在兼容性问题。 2、…

枚举类的final修饰

今天开发跟我反馈了一个很奇怪的问题,说有个对象的状态属性是枚举类,设置了该对象的状态后,插入数据库,这个状态没了,凭空消失了,变成了空白字符串。这让人感觉非常奇怪,整个问题排查后得到的结…

低代码平台选型标准:功能、应用与优劣势分析

在数字化转型的浪潮下,中小企业面临满足市场需求、提高效率和竞争力的挑战。低代码平台做为数字化转型的重要工具,为中小企业带来了快速开发和定制应用程序解决方案。但是,在很多低代码平台中,选择是一个重要的环节。企业应该根据…

docker---资源控制

docker的资源控制 对容器使用宿主机的资源进行限制。 三种控制方向:CPU 内存 磁盘I/O docker使用linux自带的功能cgroup;control groups是linux内核系统提供的一种可以限制记录,隔离进程所使用的物理资源机制。 docker借助此…

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…

通过静态HTTP实现负载均衡

在当今的互联网环境中&#xff0c;随着用户数量的不断增加和业务需求的不断扩大&#xff0c;单台服务器往往无法承受所有的访问压力。为了确保网站的可用性和性能&#xff0c;负载均衡成为了一种常见的解决方案。本文将探讨如何通过静态HTTP实现负载均衡&#xff0c;以提升网站…

AUTOSAR CP Port Driver简介

Port Driver 1 背景2 基于 EB 及 TC39X 配置3 Port API 使用1 背景 Port driver 在 AUTOSAR 中是一个比较冷门的模块,基本上在 MCAL 层级,关注的人也少,他由不像其他模块那样通用型比较强,Port 在每种内核的 MCU 的配置都有区别,甚至有些芯片直接没有 Port 模块,使用其他方…

磁盘的移臂调度方法

refer: 理解&#xff1a; 访问磁盘需要先找到数据&#xff0c;在机械硬盘里并不是直接电子读取&#xff0c;需要移动磁头到相应的数据块上才可以读取&#xff08;磁头移动到目标柱面&#xff0c;即磁道&#xff0c;然后磁片旋转磁头才能访问到相应扇区&#xff0c;进而读取数…

MAT(MemoryAnalyzer)分析内存泄露实战

线上有一个应用&#xff0c;每过一段时间内存就跑满&#xff0c;因为是非主要应用且周期较长&#xff0c;一直是采取的重启策略。近期有时间&#xff0c;就进行了一番分析。 使用MAT对dump文件进行分析 第一步就已经很清晰了 第二步&#xff0c;点击此处 基本上就可以定位是此…

WebStorm:Mac/Win上强大的JavaScript开发工具

WebStorm是JetBrains公司开发的针对Mac和Windows系统的JavaScript开发工具。它为开发者提供了一站式的代码编辑、调试、测试和版本控制等功能&#xff0c;帮助你更高效地进行Web开发。新版本的WebStorm 2023在性能和用户体验方面都做出了重大改进&#xff0c;让你的JavaScript开…

【LeetCode】2703. 返回传递的参数的长度

返回传递的参数的长度 题目题解 题目 请你编写一个函数 argumentsLength&#xff0c;返回传递给该函数的参数数量。 示例 1&#xff1a; 输入&#xff1a;args [5] 输出&#xff1a;1 解释&#xff1a; argumentsLength(5); // 1只传递了一个值给函数&#xff0c;因此它应返…

免费的网页数据抓取工具有哪些?【2024附下载链接】

在网络上&#xff0c;有许多网页数据抓取工具可供选择。本文将探讨其如何全网采集数据并支持指定网站抓取。我们将比较不同的数据采集工具&#xff0c;帮助您找到最适合您需求的工具。 网页数据抓取工具种类 在选择网页数据抓取工具之前&#xff0c;让我们先了解一下这些工具…