学习NestJs你必须了解IOC(反转控制)

哈喽哈喽,大家好。我是你们的金樽清酒。今天是回家学习的第三天。说实话,感觉现在看的全是理论,没有经历什么实战,所以老是感觉心里没底。遂写篇文章总结一下吧,来检验一下自己的学习成果。

什么是IOC(Inverse of Control)

ioc也叫反转控制。为什么叫反转控制呢?我们举个例子来理解一下。在后端系统中有很多的功能,如controller模块。service模块。数据库模块。要使用这样我们要创建很多实例,并且它们可能各自依赖,有很强的依赖关系,十分的复杂。那我们要使用它们还得一个个去实例化然后组织它们的执行顺序十分的麻烦。基于这个问题,nest中用到了ioc反转控制来解决这个问题。

我们想一下。如果可以的话,能不能有一个东西帮我们自动的实例化对象并且自动的组织执行顺序。比如我们写好依赖关系,然后它扫描到依赖关系就能自动的创建实例并且按规定的顺序执行。有,它就是ioc反转控制。它提供一个容器将扫描到的依赖自动创建然后自动组装调用。

如何使用ioc

在nest中有@Controller和@Injectable两种装饰器表示该calss可以被放到ioc容器当中。那么这两个装饰器有什么区别呢?@Controller只能被注入,而@Injectable装饰的既可以注入也可以被注入。让我们创建一个项目看一下。

用nest cli命令

arduino 复制代码
nest new ioc_test

创建一个名为ioc_test的nest项目。

创建完之后src下有几个文件。main.ts是入口文件。controller是解析参数控制路由的。module是管理模块之间的依赖的,service是处理业务逻辑的地方,比如返回数据操作数据库。这几个文件之间是啥关系呢。controller解析参数之后拿到service里面的方法使用。module就是管理各模块之间的依赖关系,谁是controller谁是provider。谁是生产者谁是消费者是吧。

首先看到sercice文件

用@Injectable装饰说明该类可以被放到ioc容器当中自动创建。然后它里面有一个getHello方法,返回hellow world。

再看到controller文件

用@Controller装饰可以被放入ioc容器。里面可以写参数控制路由。中间构造器注入AppSrvice。这个provider的注入我们后面单独一篇文章讲。你看这就是@Controller和@Injectable的区别。一个只能被注入。后者可以注入也可以被注入。

再看module为文件

我们用装饰器修饰为可注入ioc容器后,需要在module里面声明,哪些是controller,哪些是provider,还有imports和exports将实例跑出引入的参数。

声明注册完之后,nest会读取这个文件,然后自动创建对象并组装,实现反转控制。

我们运行一下看一下效果。

nest run start运行之后,程序已经运行在3000端口。我们用浏览器访问一下localhost://3000

可以看到成功的返回在controller里面使用的service返回的内容。这就是反转控制。

总结

在后端中有很多的功能。如果一个手动的创建对象并使用会非常的复杂。所以在nest中有IOC机制。自动的根据依赖关系自动创建对象并且组装。它的实现原理是创建一个IOC容器,在被@Controller和@Injctable装饰的class说明可以被放进IOC容器,然后在ioc容器中根据依赖实例化并且组装。

相关推荐
AC赳赳老秦1 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼1 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
weixin_431600442 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒2 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
计算机魔术师3 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户921080262863 小时前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端
拾年2754 小时前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__4 小时前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年2754 小时前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js
mmsx4 小时前
一个 Bug 修了 12 轮,根因只有一句话:AI 编程时代,日志才是唯一的真相
前端