IOC/DI概念简述及基本应用
早几年面试时,面试官经常问我依赖注入的概念,但有面试官自己都不是很清楚ioc和di的区别,而是草草归于一类,今天翻了翻以前写的demo,顺便把这部分概念整理出来,加深一下印象。
先科普一下,IOC是什么
IOC(Inversion of Control)又称控制反转,它并不是指某种技术实现,而是OOP的一种设计原则。
这个概念基础不牢靠的同学很多都是和DI混淆的,包括我曾经遇到几个面试官也是这样(面试过程极其尴尬),这里着重强调。
为什么叫控制反转?传统程序设计中,我们经常使用 new 创建对象,这种做法是我们主动去创建依赖对象,可以理解为“正转”。
如果把创建对象(new)的操作移交给某个程序(IOC容器)来控制,就理解为“反转”。也就是说,就是把创建对象交给IOC容器去做,将控制权反转给IOC容器。
什么是DI
DI(Dependency Injection)又称依赖注入,是IOC的一种实现方式。
言简意赅的讲,由容器动态创建依赖关系并注入到组件中去。依赖注入并不能给程序带来更多功能,却可以提升组件重用率、系统可扩展性,让程序更灵活。
.Net Core的实现
net core自带IOC容器(也许你听过这一句:一切皆注入),只需要简单配置即可使用。
先新建一个core项目,然后编写接口和实现类:
- public interface IProduct
- {
- void Get();
- }
- public class Product : IProduct
- {
- public void Get()
- {
- throw new NotImplementedException();
- }
- }
之后进入Startup进行配置:
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddTransient<IProduct, Product>();
- }
接下来是代码环节:
- public class Test
- {
- private IProduct Pro { get; set; }
- public UserController(IProduct pro)
- {
- Pro = pro;
- }
- public void Get()
- {
- //实现
- Pro.Get();
- }
- }
别走,还没完
还有一个点需要注意,那就是生命周期。一般来说,既然问到了IOC,那么生命周期必然也会引出,所以一定要搞清楚。
生命周期有三种:
(单例模式)Singleton:首次请求创建,之后所有请求都沿用这个已创建的服务。
(瞬态模式)Transient:每次请求都创建,上面的代码里就是这种模式。
(作用域模式)Scoped:每次请求创建,同一个请求内不管调用多少次都只会被创建一次。
- //瞬态
- services.AddTransient<IProduct, Product>();
- //作用域
- services.AddScoped<IProduct, Product>();
- //单例
- services.AddSingleton<IProduct, Product>();
希望对大家有帮助。
IOC/DI概念简述及基本应用的更多相关文章
- Spring框架-IOC/DI详细学习
一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...
- Spring+IOC(DI)+AOP概念及优缺点
Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...
- Spring.Net---2、IoC/DI基本概念
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- JavaWeb_(Spring框架)Spring中IoC与DI概念入门
Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spri ...
- Spring IOC/DI和AOP原理
一 IOC/DI 1. 概念机原理 IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序.对象及其依赖对 ...
- 深入理解IoC/DI
------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- 工厂方法模式与IoC/DI
IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 1:如何理解IoC/DI 要想理解上面两个概念,就必须搞清 ...
- spring--学习之IOC DI
2.1.1 IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器 ...
随机推荐
- Black Hat Python之#2:TCP代理
在本科做毕设的时候就接触到TCP代理这东西,当时需要使用代理来对发送和收到的数据做修改,同时使用代理也让我对HTTP协议有了更深的了解. TCP Proxy用到的一个主要的东西就是socket.pro ...
- Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...
- 【Spring】JdbcTemplate的使用,查询,增、删、改
数据库名:taobaodb 配置文件: JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdat ...
- HTML、CSS与JS实现简易iPhone计算器
效果如图 源码,通俗易懂 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- JavaScript (三) js的基本语法 - - 数组 与函数 、关键字
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.关键字 1.break 关键字使用 break关键字:如果在循环中使用,遇到了break,则立刻跳出 ...
- Java实现 蓝桥杯 算法训练 Balloons in a Box
试题 算法训练 Balloons in a Box 问题描述 你要写一个程序,使得能够模拟在长方体的盒子里放置球形的气球. 接下来是模拟的方案.假设你已知一个长方体的盒子和一个点集.每一个点代表一个可 ...
- Java实现 LeetCode 538 把二叉搜索树转换为累加树(遍历树)
538. 把二叉搜索树转换为累加树 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和 ...
- Java实现蓝桥杯算法提高 陶陶摘苹果
试题 算法提高 陶陶摘苹果 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30 ...
- Java实现 LeetCode 327 区间和的个数
327. 区间和的个数 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper. 区间和 S(i, j) 表示在 nums 中,位置从 i ...
- Java实现 蓝桥杯VIP 算法训练 集合运算
问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...