Spring中控制反转和依赖注入
Spring之IOC控制反转和DI依赖注入
1、控制反转是什么?
IOC控制反转,所谓反转是指使用方本身不负责依赖对象的创建和维护,而将对象的管理(创建、维护、销毁)都交给Spring容器管理,在使用被调用类的时候Spring容器将被调用类的对象反转给使用方(传统的使用方法,使用对象,都是在使用方的内部new出实使用类的对象)。将创建对象的权利交给第三方,控制反转就是控制权的转移。
通过控制反转,可以实现由Spring容器控制各个类之间的关系。借助于控制反转,被调用者是被“注入”而不是被硬编码到使用方的代码中,这可以大大降低调用者和被调用者之间的依赖关系。
比如:A程序要使用B程序中的方法,首先就是要创建(new)出B的对象,然后使用B的对象去调用它的方法。
控制反转,就是将A和B的对象都交由Spring管理。
使用传统的方法,存在的问题:
使用方和被使用方之间的耦合度太高
控制反转带来的好处:
1、资源集中管理,实现资源的可配置和易管理。
2、降低了使用资源双方的依赖程度,也就是我们说的耦合度。
控制反转的使用
2、依赖注入是什么?
DI依赖注入,依赖注入是控制反转的一种实现方式,由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。也就是获得依赖对象的过程由自身管理变为由IOC容器主动注入。通过反射机制实现。讲的通俗点,就是在运行期,由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法或者构造方法等进行设定。
所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。
3、控制反转和依赖注入的关系
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是不同维度的同一个概念。
其实就是:当使用方需要被使用方的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
我自己的理解:控制反转就是由spring容器来控制使用方A调用的具体被使用类B。依赖注入就是使用方A依赖于spring容器的注入。
代码解释:
传统的方式,Servise是通过调用类的创建,进行使用的
@Controller("controller1")
public class Controller1 {private Servise service = new Servise();public void add(){service.add();System.out.println("Controller1.add()....");}
}
Spring中,将所有的对象交由Spring容器处理,当我们需要使用的所需求的类的资源的时候,Spring就帮使用类注入相应的资源。
@Controller("controller1")
public class Controller1 {@Autowiredprivate Servise service;public void add(){service.add();System.out.println("Controller1.add()....");}
}
Spring中控制反转和依赖注入相关推荐
- Spring 中控制反转 和 依赖注入 的区别和关系
控制反转 (IOC),面向对象的一种设计原则,目的是降低耦合度.依赖注入(DI)是实现控制反转的常见方式,控制反转的另外一种实现方式是 依赖查找.控制反转中的控制指的是自己控制(创建)自己的成员变量, ...
- SSM框架—Spring基础—控制反转和依赖注入(概念)
控制反转: 控制反转(IoC)是面向对象编程的一个设计原则,用于降低代码耦合度 在传统面向对象编程中,获取对象的方式是用关键字"new"主动创建一个对象,也就是说,应用程序掌握着对 ...
- Spring的控制反转与依赖注入
学习过Spring的都知道Spring有三大核心的概念,分别是控制反转(IOC).依赖注入(DI)和面向切面编程(AOP).今天就来聊聊我对控制反转和依赖注入的了解,至于面向切面编程放到后面讲解. 一 ...
- Spring的控制反转以及依赖注入,控制反转使程序具有高拓展性。
1. 控制反转(Inversion of Control, IOC) 将对象的创建.赋值.管理交给容器(Spring),通过xml文件即可修改对象的属性,不必修改源代码,具有高拓展性.各个模块间的对象 ...
- spring的控制反转和依赖注入讲解
1.Spring 1.1 简介 2002年首次推出Spring的雏形,interface21框架 2004正式发布1.0版本 解决企业应用开发的复杂性,其理念是使现有的技术更加容易使用! SSH:St ...
- Spring框架中的控制反转和依赖注入
控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...
- 轻松了解Spring中的控制反转和依赖注入
点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 When you have something you really l ...
- Spring容器,控制反转,依赖注入
Spring boot学习之旅,为更好督促自己学习以记之,仅供参考. spring容器 程序启动的时候会创建spring容器,扫描给spring容器一个清单,比如:@Controller, @Bean ...
- Spring Ioc/DI 控制反转和依赖注入
Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入. 如何理解这两个概念呢? Ioc Ioc(控制反转)实际上就说把对象 ...
最新文章
- iOS SDWebImage 缓存机制与缓存策略
- vb.net限制datagridview不能选择_家里安装200兆宽带,网速还是很慢怎么办?教你一招解除网速限制...
- Vue.js 组件 处理边界情况
- 后疫情时代,乳企如何迎来下一个风口?
- java txtreader_一个简单的Java读写文件例子
- java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)
- 20145233 20145228《信息安全系统设计基础》第二次实验报告
- mysql的常用的备份工具_39、mysql常用备份工具
- Python 之 Python2 和 Python3 的区别
- 链表c++代码的实现
- 【今日CV 视觉论文速览】 19 Nov 2018
- 将Markdown嵌入到我们的HTML页面中
- 超干货!为了让你彻底弄懂 MySQL 事务日志,我通宵搞出了这份图解!
- java list foreach 修改_Java ArrayList在foreach中remove的问题分析
- redis灵魂拷问:聊一聊zset使用
- 显示器刷新率30hz_如何使您的120Hz或144Hz显示器使用其广告刷新率
- opencv-python(cv2)——如何读取和保存中文路径图片(含代码)
- 模块一 day05 数据类型(上)
- 梦幻西游热门服务器卡顿延迟,梦幻西游:周末活动卡顿的最总原因,是人真的多还是服务器问题?...
- python---做一个恶搞程序