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意味着将你设计好的对象交给容器 ...
随机推荐
- 浅谈SIEM
一.概念 SIEM ( Security Information Event Management,安全信息与事件管理) Gartner的定义:安全信息和事件管理(SIEM)技术通过对来自各种事件和上 ...
- SpringBoot 之 视图解析与模板引擎、 热部署、日志配置(四)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一 . SpringBoot环境下的视图解析技术 1. JSP JSP 是我们常用的视图技术了,但是Sp ...
- ansible取出register变量中最长字符串
背景 在用ansible撰写一个etcd恢复的playbook时,有一个操作是获取etcd启动时的"initial-cluster"启动参数,该参数在etcd集群不同节点不一致,需 ...
- Spring Cloud Ribbon 客户端负载均衡
Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等,内置可插拔.可定制的负载均衡组件.下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域感知轮询负载均 ...
- Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)
小明植树 题目 问题描述 小明和朋友们一起去郊外植树,他们带了一些在自己实验室精心研究出的小树苗. 小明和朋友们一共有 n 个人,他们经过精心挑选,在一块空地上每个人挑选了一个适合植树的位置,总共 n ...
- (Java实现)洛谷 P2095 营养膳食
题目描述 Mr.L正在完成自己的增肥计划. 为了增肥,Mr.L希望吃到更多的脂肪.然而也不能只吃高脂肪食品,那样的话就会导致缺少其他营养.Mr.L通过研究发现:真正的营养膳食规定某类食品不宜一次性吃超 ...
- Java实现 蓝桥杯VIP 算法训练 奇偶判断
问题描述 能被2整除的数称为偶数,不能被2整除的数称为奇数.给一个整数x,判断x是奇数还是偶数. 输入格式 输入包括一个整数x,0<=x<=100000000. 输出格式 如果x是奇数,则 ...
- Java实现有理数的循环节
1/7 = 0.142857142- 是个无限循环小数. 任何有理数都可以表示为无限循环小数的形式. 本题目要求即是:给出一个数字的循环小数表示法. 例如: 输入: 1,5 则输出: 0.2 输入: ...
- Java实现花朵数
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水 ...
- 一文了解Docker容器技术的操作
一文了解Docker容器技术的操作 前言一.Docker是什么二.Docker的安装及测试Docker的安装Docker的Hello world测试三.Docker的常见操作镜像的基本操作容器的基本操 ...