学习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容器中根据依赖实例化并且组装。

相关推荐
静小谢34 分钟前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
用户47949283569151 小时前
改了CSS刷新没反应-你可能不懂HTTP缓存
前端·javascript·面试
还好还好不是吗1 小时前
老项目改造 vue-cli 2.6 升级 rsbuild 提升开发效率300% upupup!!!
前端·性能优化
sumAll1 小时前
别再手动对齐矩形了!这个开源神器让 AI 帮你画架构图 (Next-AI-Draw-IO 体验)
前端·人工智能·next.js
OpenTiny社区1 小时前
2025OpenTiny星光ShowTime!年度贡献者征集启动!
前端·vue.js·低代码
wangan0941 小时前
不带圆圈的二叉树
java·前端·javascript
狗哥哥1 小时前
从零到一:打造企业级 Vue 3 高性能表格组件的设计哲学与实践
前端·vue.js·架构
疯狂平头哥2 小时前
微信小程序真机预览-数字不等宽如何解决
前端
Drift_Dream2 小时前
前端趣味交互:如何精准判断鼠标从哪个方向进入元素?
前端
hqk2 小时前
鸿蒙ArkUI:状态管理、应用结构、路由全解析
android·前端·harmonyos