Spring框架学习二:控制反转与依赖注入

Spring依赖注入和控制反转 学习依赖注入和控制反转的概念,然后借助代码示例了解 Spring 框架如何支持它们。 控制反转 在我们开始做任何事情之前,让我们先了解一下什么是控制反转。 控制反转是面向对象编程中使用的术语,通过该术语,对象或对象集的控制权被赋予框架或由框架提供的容器。 虽然上面的图片是幽默的,但它描述了什么是控制反转。如果我们将人类视为软件组件或服务,他们的目的是执行诸如起床、开会或支付账单等行为。对于其他事情,例如跟踪会议,设置警报或提醒人们使用电话或任何智能设备。 什么是依赖? 一个应用程序由多个类组 阅读详情

概述里提到,Spring中的两个概念:控制反转(IoC)和依赖注入(DI),现在来描述下这两个概念:

IoC—Inversion of Control,即“控制反转”

IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

之前开发中,直接new一个对象即可。
学习spring之后,将由spring创建对象实例–> IoC 控制反转(Inverse of Control),
之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中。

//接口
public interface UserService {
    public void addUser();
}
//实现类
public class UserServiceImpl implements UserService {
    @Override
    public void addUser() {
        System.out.println("a_ico add user");
    }
}
<!-- applicationContext.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 配置service 
        <bean> 配置需要创建的对象
            id :用于之后从spring容器获得实例时使用的
            class :需要创建实例的全限定类名
    -->
    <bean id="userServiceId" class="com.zyj.a_ioc.UserServiceImpl"></bean>
</beans>
@Test
public void demo(){
    //从spring容器获得
    //1 获得容器
    String xmlPath = "com/zyj/a_ioc/applicationContext.xml";
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    //2 获得内容--不需要自己new,都是从spring容器获得
    UserService userService = (UserService) applicationContext.getBean("userServiceId");
    userService.addUser();
}

DI—Dependency Injection,即“依赖注入”

组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置

//dao
//接口
public interface BookDao {
    public void addBook();
}
//实现类
public class BookDaoImpl implements BookDao {
    @Override
    public void addBook() {
        System.out.println("di  add book");
    }
}
//service
//接口
public interface BookService {
    public abstract void addBook();
}
//实现类
public class BookServiceImpl implements BookService {
    // 方式1:之前,接口=实现类
    //private BookDao bookDao = new BookDaoImpl();
    // 方式2:接口 + setter
    // 优点:在配置文件注入实现了BookDao接口的实现类,更换实现类时只需修改配置文件,不需要修改源码
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    @Override
    public void addBook(){
        this.bookDao.save();
    }
}
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 
    模拟spring执行过程
        创建service实例:BookService bookService = new BookServiceImpl() IoC  <bean>
        创建dao实例:BookDao bookDao = new BookDaoImpl()                 IoC
        将dao设置给service:bookService.setBookDao(bookDao);             DI   <property>

        <property> 用于进行属性注入
            name: bean的属性名,通过setter方法获得
                setBookDao ##> BookDao ##> bookDao
            ref :另一个bean的id值的引用
     -->
    <!-- 创建service -->
    <bean id="bookServiceId" class="com.zyj.b_di.BookServiceImpl">
        <property name="bookDao" ref="bookDaoId"></property>
    </bean>
    <!-- 创建dao实例 -->
    <bean id="bookDaoId" class="com.zyj.b_di.BookDaoImpl"></bean>
</beans>
YOLOv11与3D点云检测融合技术深度解析:从2D检测到三维空间投影的完整实现 2D-3D融合目标检测技术研究 本文系统阐述了基于YOLOv11的2D-3D目标检测融合技术,重点分析了YOLOv11在融合系统中的定位优势及其架构设计。研究表明,2D图像与3D点云数据具有显著的互补特性:2D图像提供丰富语义信息,而3D点云则精确描述几何结构。 关键技术要点: YOLOv11通过GSConv平衡卷积和VoVGSCS特征融合模块,在保持实时性的同时提升了检测精度 系统采用模块化设计,包含坐标投影、点云分割、边界框拟合等核心组件 针对点云数据的非均匀分布特性,提出了多尺度特征增强和距离差异化检 阅读详情

相关推荐

Redis简介和项目应用

内存优先架构简介Redis的读写操作都是在内存中执行的,计算机内存的读写速度极快,比机械硬盘的读写快很多,因此也会比MySql采用机械读写的方式性能更高。但是这样会产生一个问题,当Redis重启之后,内存中的数据就会丢失,为了保证数据不会因为服务器重启而丢失,Redis实现了数据持久化的机制,这个机制会把数据存储到磁盘中,当服务器重启的时候,能够从磁盘中恢复原有的数据。

人工智能、机器学习 758

深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓

在本文中,我们将介绍IoC(控制反转)和DI(依赖注入)的概念,以及如何在Spring框架中实现它们。控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。与传统编程相比,传统编程中我们的自定义代码调用库,而IoC使框架控制程序的流程并调用我们的自定义代码。为了实现这一点,框架使用具有附加行为的抽象。如果我们想要添加自己的行为,我们需要扩展框架的类或插入自己的类。将任务的执行与其实现分离更容易在不同实现之间切换。

小万哥的博客 1027

C++/WinRT入门指南:现代Windows原生开发的核心技术

Windows运行时(WinRT)是微软为现代Windows应用开发设计的一套跨语言API框架,它基于COM技术原理构建,提供了统一的二进制接口标准。这项技术的核心价值在于让开发者能够以原生性能调用系统级功能,同时保持跨语言兼容性。在工程实践中,C++/WinRT作为官方推荐的C++语言投影,通过标准C++语法封装WinRT API,显著降低了开发复杂度。特别是在异步编程场景中,结合C++20协程特性,能够大幅提升代码可读性和维护性。对于需要高性能图形处理、系统集成或跨平台兼容的桌面应用开发,掌握C++/W

weixin_33910191的博客 1196

Spring学习笔记_2_依赖注入/控制反转

概念 通过依赖注入,Java EE应用中的各种组件不需要以硬编码的方式进行耦合,当一个Java实例需要另一个Java实例时,系统自动提供需要的实例,无需程序显示获取。因此,依赖注入实现了组件之间的解耦。 传统是使用new 来调用,这样会导致调用者和被调用者之间的耦合性增加,对项目后期维护不利。 控制反转 在使用Spring框架后,对象的实例不再由调用者创建,而是由spring容器创建,这样控制权由...

老范183的博客 446

【ros】ROS1的安装和相关使用方法

主要学习ros相关内容

Greary的博客 2378

lift off工艺为什么常用蒸发的方式镀膜?

电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。

1685

spring基础(2)-控制反转IOC和依赖注入DI

转载文章:https://blog.csdn.net/sinat_21843047/article/details/80297951 IOC 定义Ioc—Inversion of Control:即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。传统的Java SE程序设计,我们直接在对象内部通过new...

s_xchenzejian的博客 197

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7744

Spring IOC注入(一)set方式注入

IOC注入的方式有好几种,现在就来学习一下set方式注入~ 可以注入的内容有: 1.基本类型(8中基本类型+字符串)的装配 2.对象类型的装配 3.集合的装配 现在就来讲讲怎么用set方式注入的吧~ 1.基本类型的装配: 配置文件set.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns

重心开始,重新开始 1万+

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

学无止境、积少成多、厚积薄发 3982

第16课:动手实战中文句法依存分析

句法分析是自然语言处理(NLP)中的关键技术之一,其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。主要包括两方面的内容:一是确定语言的语法体系,即对语言中合法句子的语法结构给予形式化的定义;另一方面是句法分析技术,即根据给定的语法体系,自动推导出句子的句法结构,分析句子所包含的句法单位和这些句法单位之间的关系。 句法分析被用在很多场景中,比如搜索引擎用户日志分析和关键词识别,比如信息抽...

春华秋实 2435

【Spring】Spring依赖注入与控制反转理解

Spring是一个庞大的框架,封装了很多成熟的功能,能够让我们无需重复造轮子;其次,它使用IOC进行依赖管理,利用JAVA的反射机制,将实例的初始化交给Spring,Spring可以通过配置文件管理实例,我们就不用自己初始化实例啦。 有人会问 “那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?” 这是因为IOC是通过反射机制来实现的。当我们的需求...

简约人生的博客 1万+

YOLO26 旋转框检测 OBB 技术:角度预测与解码优化

YOLO26旋转框检测技术通过CSL角度编码有效解决了OBB检测中的周期性问题。该技术采用5参数表示法(cx,cy,w,h,θ),在检测头中分别处理分类、回归和角度预测。核心创新点包括:1)使用高斯或三角窗口的CSL编码对角度进行平滑表示;2)通过加权平均解码角度,避免边界不连续问题。该方法在遥感、文本检测等需要精确方向信息的场景中表现优异,相比传统HBB框可提升定位精度30%以上,同时保持了YOLO系列的高效特性。

一键难忘的博客 521

Spring 控制反转与依赖注入

本文介绍了控制反转(IoC)和依赖注入(DI)在Spring框架中的作用,通过实例阐述了它们如何帮助实现对象的解耦、提高灵活性和可维护性,以及如何在代码中应用这些设计原则。

时间如瑾 代码如诗 1054

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SSM框架学习——Spring的控制反转IoC与依赖注入DI

提到Spring首先想到的肯定是Spring的IoC容器了。在了解Spring的用法之前我们必须了解什么是和。**控制反转(Inversion of Control)**是面向对象编程中的一种设计原则,它建议将不需要的职责移出类,让类专注于核心职责,从而提供松散耦合,提高优化软件程序设计。简单一点来说,我原来需要一个对象需要自己手动去new,我必须知道哪些类实现了相应的接口,而有了控制反转,我只需要向框架的容器要一个,由它实现装配,对对象组件的控制权也就由代码转移到了外部容器。其中依赖查找又可以分为。

CairBin的博客 813

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring框架(二)Spring控制反转IoC详解

Spring框架(二)Spring控制反转IoC详解

淡沫初夏zz的博客 2143

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring框架解析01——什么是控制反转与依赖注入

Spirng框架解析01 前言:Spring框架是一个轻量级的企业级开发的一站式解决方案! 1、控制反转(Inversion of Contorl -IoC) 1.1IoC的概念 啥叫IoC?干哈的?博主当年面试经常会被面试官这么问!今天我们就好好唠唠啥是IoC! IoC:控制反转,在Spring框架中指的是将对象的创建权移交给容器(ApplicationContext容器).重点,容器来负...

帅哥威的博客 1538

Spring中的依赖注入和控制反转

控制反转(Inversion of Control, IoC)是一种设计原则,它将对象的创建和依赖管理的控制权从应用程序代码转移到容器中。在传统的编程模式中,对象通常由应用程序显式创建和管理,而在IoC中,容器负责创建和管理对象,这使得代码更加灵活和易于测试。依赖注入(Dependency Injection, DI)是一种实现控制反转的技术,通过将对象的依赖关系在外部进行配置并注入,而不是在对象内部自行创建依赖。这样可以降低对象之间的耦合度,提高代码的灵活性和可测试性。

weixin_46372265的博客 1460

深入理解 Spring 控制反转与依赖注入

概览 对于 Spring 框架来说,控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)是个等同的概念,控制反转是通过依赖注入实现的。在这篇文章中,我们会详细介绍 IoC 和 DI 的概念,然后我们会讨论 Spring 框架中是如何实现 IoC 和 DI 的。 什么是控制反转 IoC 是软件工程的一个设计原则,是指对...

Leo的博客 4835

Spring学习(三)IOC控制反转与DI依赖注入

IOC(Inversion of Control,控制反转)是spring的核心,贯穿始终。 所谓IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系: 传统开发模式:对象之间互相依赖IOC开发模式:IOC容器安排对象之间的依赖 Spring所倡导的开发方式就是:所有的类都会在Spring容器当中登记,告诉Spring你是一个什么东西,你需要

wangxin1248的博客 5086

使用 Spring 实现控制反转和依赖注入

控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。与传统编程相比,传统编程中我们的自定义代码调用库,而IoC使框架控制程序的流程并调用我们的自定义代码。为了实现这一点,框架使用具有附加行为的抽象。如果我们想要添加自己的行为,我们需要扩展框架的类或插入自己的类。将任务的执行与其实现分离更容易在不同实现之间切换程序的更高的模块化更容易通过隔离组件或模拟其依赖项来测试程序,并允许组件通过契约进行通信。

架构师小吴的博客 1181

【Spring Boot】深入浅出控制反转与依赖注入

控制反转(Inversion of Control ,IOC)和依赖注入(Dependency Injection ,DI)是两个紧密相关的设计概念,常被一同提及但又容易混淆。依赖注入是控制反转实现思想的实现方式。依赖注入的提出是为了简化模块的组装过程,降低模块之间的耦合度。

Arabys的博客 1029

【JAVA】Java高级:Spring框架与Java EE—Spring框架概述(控制反转、依赖注入)

通过控制反转和依赖注入,Spring框架提供了一种灵活、可维护的方式来管理对象的创建和依赖关系。本文通过具体的示例展示了如何使用构造器注入来实现依赖注入的基本原理。掌握Spring框架的IoC和DI是进一步学习Spring生态系统中其他功能(如Spring MVC、Spring Boot等)的基础。

thinking_chou的专栏 943

(三)Spring教程——依赖注入与控制反转

Spring有两个重要的接口:BeanFactory和ApplicationContext,所谓的容器就是实现了BeanFactory接口或者是ApplicationContext接口的类的实例,BeanFactory是最顶层、最基本的接口,它描述了容器需要实现的最基本的功能,比如对象的注册、获取等。在编写传统的Java应用代码时,我们一般是直接在对象内部通过new来创建对象,让程序主动去创建依赖对象,这就是一个“谁使用,谁创建”的过程,创建依赖对象的主动权和创建时机都是由自己来把控。

853

Spring框架中,什么是控制反转?什么是依赖注入?使用控制反转与依赖注入有什么优点

Spring框架中,什么是控制反转?什么是依赖注入?使用控制反转与依赖注入有什么优点

杨荧的优快云博客 850

Spring的控制反转与依赖注入

Spring的控制反转(Ioc)和依赖注入(DI)理解

qq_43418737的博客 995
上一篇: Spring框架学习一:概述
下一篇: Eclipse安装Activiti BPMN 2.0 designer插件
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值