对ioc的简单理解

news2024/11/18 21:33:35

最近闲着无聊,又把ioc梳理了一遍,一边看一边满脑子是王宝强的“啥啥啥,这又是个啥”的表情包。
一会注入、一会依赖、一会又自动装配的……哎……还好有了点头绪。

ioc的概念

1、ioc是什么?有什么用?

老生常谈,ioc是控制反转,控制的是bean的生命周期,反转的是将对象的控制权由调用方交给了ioc容器。
主要的作用就是解耦。

2、对象、ioc容器、bean之间的关系?

在ioc容器里的对象就叫做bean,bean和普通对象相比,新增了作用域等属性。不过我看一般java bean、java 对象、bean对象,说啥的都有,所以看来也没必要区分。

bean的生产

1、ioc 容器做了哪些工作?

ioc容器就是一个生产bean的工厂,“原材料”是bean的名称,“产出”是可以被直接使用的bean。其工作主要分为两部分:
(1)容器启动阶段:加载和解析配置文件,保存到对应的bean定义中
(2)bean实例化阶段:实例化对象等。

2、bean的生命周期?

(1)实例化
将类实例化成对象,比如 Car car=new Car();
(2)属性赋值
又叫依赖注入。属性赋值主要有两种方式:setter方法、构造方法。

//使用get/set里的set方法:
public class Car{
    private String color;
	
	public void setColor(String color) {
		this.color = color;
	}
}

//使用构造方法:
public class Car {
    private String color;
	
	public Car(String color) {
		this.color = color;
	}
}

(3)初始化
没看明白这部分具体干了点啥。反正自从经历过这步之后,bean就可以使用了。
(4)使用
(5)销毁

bean的使用

这部分讲的是spring如何配置,才能使用到ioc容器里的bean。

(1)引入依赖:在pom文件中添加依赖。
(2)开启自动扫描功能。
开启后,会自动扫描指定的包下的所有类,如果类上使用了@Component等定义bean的注解,就将该类装配到容器中

//spring中
@Configuration
@ComponentScan(basePackages = "com.cn.config")

//Springboot中可以简化为:
@SpringBootApplication

(3)使用注解定义bean。
这4个都可以:@Controller、@Service、@Repository、@Component

(4)自动装配。
@Autowired:

  • 默认是根据类型装配,如果想根据名称装配,需要配合@Qualifier一起使用
  • 其有一个required属性,默认是true,表示在注入的时候,要求被注入的bean是必须存在的,如果不存在会报错。

@Resource:

  • 默认根据名字装配,没有指定名称时会把属性名当做名称。根据名称找不到时,才会按类型装配。
  • 按类型装配时,某种类型的bean只能有一个

(5)装配完后就可以使用了。

仅为个人见解,如有不足,欢迎讨论👏🏻

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

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

相关文章

使用wkhtmltoimage实现生成长图分享

需求 用户可以选择以长图的形式分享本网页 方法 wkhtmltopdf wkhtmltopdf url filewkhtmltoimage url file java Runtime.getRuntime().exec() 下载 直接去官网下载对应的版本:官网 命令行使用WK > wkhtmltopdf https://www.nowcoder.com /opt/project/…

ModaHub魔搭社区:自动化机器学习Auto-Sklearn全面详细教程

Auto-Sklearn的简介 Auto-Sklearn(基于scikit-learn库的自动化的机器学习工具)的概述 简介 Auto-Sklearn,在2015年由德国图宾根大学的研究人员提出的,最初的版本于2016年发布。auto-sklearn基于scikit-learn库进行开发,支持多种机器学习任务,包括分类、回归、时间序列…

【附安装包】Mudbox2023安装教程

软件下载 软件:Mudbox版本:2023语言:英文大小:938.82M安装环境:Win11/Win10/Win8硬件要求:CPU2.5GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com/s/1K…

【数学建模】常微分,偏微分方程

1.常微分方程 普通边界 已知t0时刻的初值 ode45() 龙格-库塔法 一阶,高阶都一样 如下: s(1) y , s(2)y s(3) x , s(4)x //匿名函数 下为方程组 核心函数 s_chuzhi [0;0;0;0]; //初值 分别两个位移和速度的初值 t0 0:0.2:180; f (t,s)[s(2);(…

基于YOLO v5的病虫害检测与优化

《A fast and lightweight detection algorithm for passion fruit pests based on improved YOLOv5》 a new point-line distance loss function is proposed to reduce redundant computations and shorten detection timethe attention module is added to the network for…

postgis中将数据库备份到其它数据库中还原

1、备份数据库 可以用命令操作 pg_dump -U postgres -h hostip -d joint-boot -Fc > "D:\\python\\Project\\PG\\data\\joint.jar"2、创建新的数据库 可以在其它postgis数据库中创建 3、还原数据库 可以用命令操作 pg_restore -U postgres -h hostip -d C -F…

vue之若依分页组件的导入使用(不直接使用若依框架,只使用若依分页组件)

vue之若依分页组件的导入使用 步骤 步骤: 工具类:src/utils/scroll-to.js 样式:src/assets/styles/ruoyi.scss 组件:src/components/Pagination 全局挂载:src/main.js 复制工具类 复制若依框架中的src/utils/scrol…

GO远程构建并调试

GO远程调试 之前写C,一直习惯了本地IDERemote CMake/GDB编译调试的模式。 因为6.824课程需要用GO,好像没有特别好的支持。记录一下如何配置调试的。 IDE: Goland 操作系统:Windows 远程服务器:Ubuntu 首先配置SSH,让其可以连接到…

1.12 进程注入ShellCode套接字

在笔者前几篇文章中我们一直在探讨如何利用Metasploit这个渗透工具生成ShellCode以及如何将ShellCode注入到特定进程内,本章我们将自己实现一个正向ShellCodeShell,当进程被注入后,则我们可以通过利用NC等工具连接到被注入进程内,…

内存泄漏的原因

内存泄漏的原因 静态集合类引起内存泄漏 静态集合的生命周期和 JVM 一致,所以静态集合引用的对象不能被释放。 public class OOM {static List list new ArrayList(); ​public void oomTests(){Object obj new Object();list.add(obj);} } 单例模式 和上面的例子…

【Vue3 知识第五讲】条件渲染、列表渲染知识详解

文章目录 一、条件渲染1.1 概述1.2 演示代码 二、列表渲染2.1 使用 指令 v-for 遍历数组2.2 **使用 指令 v-for 遍历对象** 十、案例作业十一、总结 在前端开发过程中,条件和循环是经常被用到的逻辑。vue中封装了自己的组件渲染指令,可以更加方便的帮助开…

vue2 vuex

一、Vuex 概述 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 使用场景 某个状态 在 很多个组件 来使用 (个人信息) 多个组件 共同维护 一份数据 (购物车) …

Go framework-go-zero

一、Go Go天然适配云原生,而云原生时代已经到来,各个应用组件基础设施等都应该积极的去拥抱云原生。 不要让框架束缚开发。 1、go-zero介绍 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,…

新唐nuc980-串口测试笔记

测试新唐nuc980串口功能的过程,如下: 1. 直接下载使用官方的ubuntu系统。 2. 直接使用官方的文件,在家目录下 NUC970_Buildroot 目录下或者自己git clone NUC970_Buildroot 工程也可以,克隆地址如下: git clone https:…

Revit SDK 介绍:AutoRoute 自动路由

前言 这个例子介绍如何用 Revit API 创建自动路由,本质上就是通过 API 创建机电管道。 内容 将出风口和风机自动连接,最终效果。 下面按步骤将其组装起来: 风机立管及连接件 生成红框内容的核心逻辑: ducts.Add(Duct.Create…

Ei Scopus 双检索 |第三届信息与通信工程国际会议国际会议(JCICE 2024)

会议简介 Brief Introduction 2024年第三届信息与通信工程国际会议国际会议(JCICE 2024) 会议时间:2024年5月10日-12日 召开地点:中国福州 大会官网:JCICE 2024-2024 International Joint Conference on Information and Communication Engin…

结构体的简单介绍

目录 概念: 与数组类比: 结构体声明: 注意: 结构体变量、全局变量、局部变量: 结构体声明中包含其他结构体变量: 结构体变量的初始化: 包含了其他结构体变量的初始化: 结构体…

报错:axios 发送的接口请求 404

axios 发送的接口请求 404 一、问题二、分析 一、问题 二、分析 axios 发送的接口请求 404,根本没有把接口信息发送到后端,这个时候你可以查看检查一下自己的接口名字,或让后端配合换一个接口名字再发送一次接口请求

性能提升5倍!翼支付基于多租户的降本增效实践

作者:王硕 中国电信翼支付 DBA 翼支付是天翼电子商务有限公司旗下第三方服务平台,面向 7000 万月活用户,提供民生缴费、消费购物、金融理财等服务内容,依托云计算、大数据、人工智能等技术,联合合作伙伴,赋…

Python操作文件的读取和写入,详解和案例介绍

Python文件IO操作是Python编程中非常重要的一部分,可以通过文件IO操作来读取和写入文件。文件IO操作提供了一种在程序中处理文件的方法,可以读取文件中的数据,也可以将数据写入到文件中。在本文中,我们将介绍Python中文件IO操作的…