30.从零开始学springboot-再谈控制反转“IOC”

“掌握Spring IoC和AOP:30道面试必备问题解析!“ 在面试过程中,Spring的IoC(控制反转)和AOP(面向切面编程)是被频繁问及的重要主题。掌握这两个核心概念和技术,对于成为一名优秀的Java开发者至关重要。本篇博客将为你提供一份包含20个关键问题的面试指南,助你在面试中游刃有余,展现出对Spring IoC和AOP的深刻理解。无论你是初学者还是有经验的开发者,这20个问题将覆盖IoC和AOP的核心知识点,帮你更好地准备面试。让我们一同深入探讨,揭秘Spring的IoC和AOP的奥秘,为你的面试之路加分不少!🚀💻。 阅读详情

前言

说起Java,就不得不提Spring,提到Spring,就不得不提IOC(控制反转)和AOP(切面), 本章就详细介绍一下IOC思想以及它在Spring中的应用.
WechatIMG1.jpeg

概念

IOC:控制反转,一种设计思想,它是Spring的核心。

所谓IOC,对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。

控制反转,由如上的概念,我们可能看到关键词“控制”,那么“反转”好像没有体现出来?
其实不然,“反转”这个东西我们这么理解,有“反转”就有“正转”.所谓的“正转”就是由我们去手动控制对象的生命周期和对象间的关系.当我们把对象的控制权交给Spring时,这就是“反转”.是不是很好理解呢?

为了加深IOC概念的理解,我们举个现实中的简单例子(例子来自网上,个人觉得较为生动,引用之)

我们是如何找女朋友的?常见的情况是,我们去一个个看街上的妹子,然后打听她们的兴趣爱好,联系方式,想办法认识她们,投其所好送其所要,这个过程是复杂深奥的,我们必须自己设计和面对每个环节。

传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个),使用完之后还要将对象销毁(比Connection等),对象始终会和其他的接口或类藕合起来。

那么Spring是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。

婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个妹子,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。

码农专属实例

以上如果还不明白的话,我们来敲几行代码助助兴

假设有一个student类,和School类

//学生类
class Student{
    private String name;
    private Int age;
    private School school;
}
//学校类
class School{
    private String name;
}

可以看出,Student的类定义是依赖于School类的.
也就是说,当我们想实例化(new)一个Student对象时,就必须new一个School对象,操作如下

Student s1 = new Student();
s1.setName("s1");
s1.setAge(20);
School school = new School();
school.setName("清华池大学");
s1.setSchool(school);

以上的案例只是最简单的一种情况,实际开发中,你会发现,类之间的依赖还是比较多而繁杂的,靠开发自己手动去这么操作,还是挺费劲的.

于是,IOC思想就体现出它的厉害来了,Spring中,所有的类都会在Spring容器中登记,告诉Spring你是个什么东西,你需要依赖什么东西,然后Spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring容器。

对于某个具体的对象比如(Student对象)而言,以前是它(Student对象)控制其他对象(School对象),现在是所有对象(Student对象和School对象)都被Spring容器控制,所以这叫控制反转

DI(Dependency Injection 依赖注入)

细心的朋友,会发现,在刚刚对IOC的解释的例子里,我有提到一个类依赖另一个类的情况,所以类实例化对象时,也必须实例化它依赖的类.

IOC是怎么处理对象间的依赖关系呢?这边就得讲到DI(依赖注入)了.

IOC的一个重点就是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是就是通过DI来实现的。

比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了Spring我们就只需要告诉Spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。

在系统运行时,Spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由Spring注入到A中的,依赖注入的名字就这么来的。

Spirng IOC案例

我们使用Spring中的@Service和@Autowired注解来写个简单的案例直观的感受IOC

//@Service注解提供控制反转服务
@Service
public class TestService {
    public String show()    {
        return "it is IOC test";
    }
 }

其它地方,只需要声明变量即可,无需“new”对象,直接使用对象

@Autowired
private TestService testService ;
@RequestMapping(path = {"/testIOC"})
@ResponseBody
public String testAction()    {
    return "IOC test: " + testService.show();
    }

小结

一句话总结IOC: Spring容器管理对象,不用自己“new”对象.

请关注我的订阅号

订阅号.png

新能源汽车整车控制器(VCU)深度全解:硬件原理、工作流程、接口设计与高压安全实战 整车控制器(VCU,Vehicle Control Unit)是新能源纯电动、混动汽车的核心决策大脑,相当于汽车的“中枢神经系统”。它不直接驱动电机,却统筹电机控制器(MCU)、电池管理系统(BMS)、充电机(OBC)、DC/DC、空调、热管理、底盘等全部部件,负责驾驶意图解析、动力输出控制、高压上下电管理、故障安全保护、能量优化等关键任务。VCU所有设计均围绕车规级环境适应性、功能安全(ISO 26262)、实时性、高压安全性四大核心目标,与通用控制器完全不同。 阅读详情

相关推荐

Unity跨平台存储避坑指南:persistentDataPath权限真相

Application.persistentDataPath是Unity中用于持久化数据的核心路径,表面提供跨平台抽象,实则底层访问机制因操作系统而异。其原理并非简单路径映射,而是受Android Scoped Storage、iOS Data Protection、Windows组策略及macOS隐私权限等多层安全模型动态约束。技术价值在于保障用户数据长期可靠存储,但若忽略平台差异,极易引发‘本地正常、真机崩溃’‘iOS可存、Android报错’等线上事故。典型应用场景包括游戏存档、离线缓存、自定义资源包

weixin_32073537的博客 350

springboot的控制反转和自动装配

它可以根据约定和配置,自动发现和配置应用程序中的各种组件,简化了开发过程并提高了开发效率。下面两个类是我们使用的service层和实现层。Controler层。

qq_45396088的博客 782

51单片机STC8G1K08驱动ws2812记录

使用51单片机控制17个2812灯,这里选择STC8芯片,最大频率可以达到35M,参考网上的各种文章案例,使用定时器做的时候实测做不到规格书要求的245-345ns,STC8G1K08不带PWM,所以只能使用nop来做,好在单片机在这里只有做编程灯的功能,省略测试过程,下面是程序,使用的是24MHz内部晶振 //设置一个灯珠 void SendOnePix(unsigned char *ptr) { unsigned char i,j; unsigned char temp; fo...

的博客 7320

SpringBoot控制反转和依赖注入

控制反转:Inversion of Control,简称IOC。对象创建控制权由程序自身转移到外部(Spring容器)。依赖注入:Dependency injection,简称DI。容器为应用程序提供运行时,所依赖的资源。 Bean对象:IOC 容器中创建、管理的对象

2302_77758423的博客 1350

关于MOS管栅极和栅介质(氧化物)的材料选择

大概解释了高K材料作为栅介质的好处,以及为什么会带来好处,同时引出了金属栅的优点,总结了使用高K材料和金属栅的原因。

qq_52054477的博客 1万+

有限差分法地震数据正演模拟(二)

正演模拟,是在地球物理勘探研究中,根据地质体的形状、产状和物性数据,通过构造数学模型计算得到其理论值(数学模拟),或通过构造实体模型来观测模型所产生的地球物理效应的数值(物理模拟)。p(t+1,x,z)即为下一时刻的波长信息,该波动方程的意义就是通过前一时刻(p(t-1,x,z))和现在时刻(p(t,x,z))预测下一时刻波的传播情况。声波波动方程:反应声波的传播规律,描述最简单的波现象的方程,p代表波场信息,v表示速度场信息因为速度只与速度场有关,所以只与x,z有关。其结果也可以作为反演的验证。

weixin_46285501的博客 3935

SpringBoot的控制反转(IOC)和依赖注入(DI)

控制反转和依赖注入

m0_47743353的博客 2463

在 Mac OS 上编译 WebRTC 教程

在 Mac OS 上编译 WebRTC 教程

iShare_Carlos的博客 1248

详细剖析SpringBoot控制反转和依赖注入以及Bean管理

扫描和注册:Spring容器启动时,会扫描指定包中的类,寻找使⽤了@Component 等注解的类,并将这些类注册为Bean定义。创建和初始化:对于单例作⽤域的Bean,Spring容器会在启动时⽴即创建这些Bean的实例,并进⾏依赖注⼊。依赖注⼊:当Spring容器创建⼀个Bean实例时,会检查其依赖(构造函数参数、Setter⽅法参数、字段)是否有@Autowired 注解,并从容器中查找相应类型的Bean进⾏注⼊。

qq_51263863的博客 973

uni-app蓝牙MTU设置失效探因:从20字节限制到跨设备兼容性实战

本文深入探讨了uni-app蓝牙开发中MTU设置失效的常见问题,特别是20字节限制的成因及解决方案。通过分析设备兼容性、蓝牙协议栈特性和系统版本差异,提供了智能延迟策略、设备特征检测和渐进式MTU提升等实战方案,帮助开发者优化蓝牙数据传输效率。

weixin_29289821的博客 288

AWR1843+DCA1000通过mmwave studio采集数据遇到的问题及解决方法

确保DCA1000的拨钮拨在了RADAR_5V_IN一边,这代表DCA1000通过与其相连的雷达板子供电,如果拨到了DC_JACK5V_IN一边,表示DCA1000用单独的电源供电。

qq_50974341的博客 4163

Spring Boot 控制反转(IoC) && 依赖注入(DI)

控制反转 (IoC) 和依赖注入 (DI) 是 Spring 框架的核心概念,它们就像“大管家”和“魔法棒”,将对象管理和依赖关系处理得井井有条,让开发者能够专注于业务逻辑的实现,编写出更加模块化、易于维护和扩展的代码。

weixin_64178283的博客 1702

图像处理 | 基于matlab的多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)算法联合的低照度图像增强(附代码)

本文介绍了一种基于多尺度Retinex(MSR)和CLAHE的低照度图像增强算法。算法首先对图像进行多尺度Retinex处理,通过不同尺度的高斯核去除光照影响;然后采用CLAHE算法进行对比度增强。Matlab实现展示了算法流程,包含灰度转换、多尺度Retinex增强和CLAHE处理。实验结果显示,该方法能有效提升低照度图像的可见性,增强细节表现。最后提出了改进建议,包括引入深度学习方法和优化参数选择。

尘世冰封的专栏 952

【SpringBoot】从零开始全面解析Spring Ioc&DI (一)

本篇博客介绍了SpringBoot中的核心概念——IoC(控制反转)和DI(依赖注入)。Spring为一个包含众多工具方法的IoC容器,其核心思想是通过控制反转将对象的创建和管理交给容器,从而降低程序的耦合度。文章通过一个造车的案例,对比了传统开发模式与使用IoC容器的区别,展示了传统模式中因底层代码改动而导致整个调用链需要修改的问题,而IoC容器通过依赖注入的方式解决了这一问题,使得程序更加灵活和易于维护。最后,文章通过代码示例演示了如何通过IoC容器实现依赖注入,从而解耦程序。

薯条不要番茄酱的博客 3469

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

用一辆车子一个轮子就把spring ioc分析透彻了,Spring的IOC是啥?有什么好处?

设计模式7大原则 为什么会有人说设计模式已死呢,因为spring这些框架帮你做好了类和对象的管理,让你写代码的时候只专注于你实现的功能,而不是设计。先来看看设计模式的7大原则: 开放-封闭原则 单一职责原则 依赖倒转原则 最小知识原则 接口隔离原则 合成/聚合复用原则 里氏代换原则,任何基类可以出现的地方,子类一定可以出现 另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你: 获取面试资料只需:点击这里领取!!!暗号:优快云 依赖倒置 假设我们设计一辆汽车:先设计轮子,然后根据轮子大小

weixin_50917449的博客 3749

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

「java面试」Spring的IOC是啥

其它面试题(springboot、mybatis、并发、java中高级面试总结等)《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

2401_83916355的博客 1035

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IOC技术在前端项目中的应用内含实现

文章目录背景什么是IOC如何实现一个IOC第一步:实现一个容器第二步:用好装饰器第三步:使用容器扩展和展望最后 背景 前端发展至今已经过去30余年,前端应用领域在不断壮大的过程中,也变得越来越复杂,随着代码行数和项目需求的增加,内部模块间的依赖可能也会随之越来越复杂,模块间的 低复用性 导致应用 难以维护,不过我们可以借助计算机领域的一些优秀的编程理念来一定程度上解决这些问题,接下来要讲述的 IoC 就是其中之一。 什么是IOC 其实学过java的就一定会知道java中有一个非常著名的框架叫做springb

我是新手的博客 715

spring IOC详解(依赖倒置原则)

要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。 什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。 这样的设计看起来没问题,但是可维护性却很低。假设设计完工之后,上司却突然说根据市场需求的变动,要我们把..

wang_nian的博客 2496

springboot

1、SpringBoot 1、认识 Spring 框架 Spring 是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架 Spring 理念:使现有的技术更加容易使用 SSM:SpringMvc + Spring + MyBatis SSH:Struct2 + Spring + Hibernate 优点 Spring 是一个开源的免费的框架(容器) Spring 是一个轻量级的、非入侵式的框架 控制反转(IOC),面向切面编程(AOP) 支持事务的处理,对框架整合的支持 1.1、什么是 Sp

zyn992529的博客 273

Spring IOC有什么好处? 最生动的解释,保证你能懂

解答借鉴于知乎的一位用户,@Sevenvidia 要了解控制反转(Inversion of Control),我觉得有必要先了解一下软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle)。 什么是依赖倒置原则? 定义:高层模块不应依赖底层模块,二者都应该依赖于抽象;抽象不应该依赖于细节;细节应该依赖于抽象。 核心思想:面向接口编程 问题由...

zkc_home 1万+

Spring【Spring的概述与设计思想】

框架相当于从“⼩作坊”到“⼯⼚”的升级,⼩作坊什么都要⾃⼰做,⼯⼚是组件式装配,特点就是⾼效框架更加易⽤、简单且⾼效容器是⽤来容纳某种物品的(基本)装置● List/Map -> 数据存储容器● Tomcat -> Web 容器Spring 也是⼀个容器,Spring 是什么容器呢?Spring 是⼀个 IoC 容器什么是 IoC?

积跬步以至千里 321

spring boot 503_Spring 的 IOC 是啥?有什么好处?

点击上方Java后端,选择设为星标优质文章,及时送达设计模式7大原则为什么会有人说设计模式已死呢,因为Spring这些框架帮你做好了类和对象的管理,让你写代码的时候只专注于你实现的功能,而不是设计。先来看看设计模式的7大原则:开放-封闭原则单一职责原则依赖倒转原则最小知识原则接口隔离原则合成/聚合复用原则里氏代换原则,任何基类可以出现的地方,子类一定可以出现依赖倒置假设我们设计一辆汽...

weixin_39612540的博客 78

【Spring】Spring是什么?

Spring 是什么?如何理解 Spring?IoC 和 DI 是啥?有什么区别?Spring 最核心的功能是啥?spring帮助网站

不能再留遗憾了的博客 4085

【SSM面试篇】Spring、SpringMVC、SpringBoot、Mybatis高频八股汇总

总结Spring、SpringMVC、SpringBoot、Mybatis面试高频八股。

gadiaola的博客 1217

spring boot 503_Spring的IOC是啥?有什么好处?

原文 :zhihu.com/question/23277575/answer/169698662设计模式7大原则为什么会有人说设计模式已死呢,因为spring这些框架帮你做好了类和对象的管理,让你写代码的时候只专注于你实现的功能,而不是设计。先来看看设计模式的7大原则:开放-封闭原则单一职责原则依赖倒转原则最小知识原则接口隔离原则合成/聚合复用原则里氏代换原则,任何基类可以出现的地方,子...

weixin_39922374的博客 102

Spring 核心特性IOC、AOP

摘要: Spring的核心特性IOC(控制反转)和AOP(面向切面编程)是简化开发的关键。IOC通过容器管理对象(如@Autowired注入),解耦代码;AOP通过切面(如@Aspect)在方法前后统一处理公共逻辑(如权限校验@CheckPermission),避免重复代码。两者协同实现高效开发:IOC管理对象依赖,AOP增强方法功能。典型应用包括服务注入(IOC)和接口拦截(AOP),如医院项目中权限校验与数据隔离的结合使用。注解驱动(零XML)是SpringBoot的主流实现方式。

echo的博客 224
上一篇: JavaBean-一个“豆子”的故事
下一篇: 31.从零开始学springboot-再谈切面“AOP”
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值