ORM 库就是利用了反射技术 , 让使用者只需要关注字段数据本身 , 对象被 ORM 库反射成为了 SQL 执行语句 , 开发者只需要关注数据字段 , 而不需要去写 SQL 了 。
4.3 reflect-metadata
reflect-metadata 是一个反射库 , Nest 用它来管理元数据 。 reflect-metadata 使用 WeakMap , 创建一个全局单实例 , 通过 set 和 get 方法设置和获取被装饰对象(类、方法等)的元数据 。
// 随便看看即可var _WeakMap = !usePolyfill && typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill(); var Metadata = https://www.52zixue.com/zhanzhang/webqd/js/04/09/69299/new _WeakMap();function defineMetadata(){ OrdinaryDefineOwnMetadata(){ GetOrCreateMetadataMap(){ var targetMetadata = Metadata.get(O); if (IsUndefined(targetMetadata)) { if (!Create) return undefined; targetMetadata = new _Map(); Metadata.set(O, targetMetadata); } var metadataMap = targetMetadata.get(P); if (IsUndefined(metadataMap)) { if (!Create) return undefined; metadataMap = new _Map(); targetMetadata.set(P, metadataMap); } return metadataMap; } }}reflect-metadata 把被装饰者的元数据存在了全局单例对象中 , 进行统一管理 。 reflect-metadata 并不是实现具体的反射 , 而是提供了一个辅助反射实现的工具库 。
5 最后现在再来看看前面的几个疑问 。
1 和 2 我想前面已经说清楚了 , 如果还有点模糊 , 建议再回去看一遍并查阅一些其它文章资料 , 通过不同作者的思维来帮助理解知识 。为什么需要控制反转?
什么是依赖注入?
装饰器做了啥?
模块 (@Module) 中的提供者(providers) , 导入(imports)、导出(exports)是什么实现原理?
5.1 问题 [3 4] 总述:
Nest 利用反射技术、实现了控制反转 , 提供了元编程能力 , 开发者使用 @Module 装饰器修饰类并定义元数据(providers\imports\exports) , 元数据被存储在全局对象中(使用 reflect-metadata 库) 。 程序运行后 , Nest 框架内部的控制程序读取和注册模块树 , 扫描元数据并实例化类 , 使其成为提供者 , 并根据模块元数据中的 providers\imports\exports 定义 , 在所有模块的提供者中寻找当前类的其它依赖类的实例(提供者) , 找到后通过构造函数注入 。
本文概念较多 , 也并没有做太详细的解析 , 概念需要时间慢慢理解 , 如果一时理解不透彻 , 也不必太过着急 。 好吧 , 就到这里 , 这篇文章还是花费不少精力 , 喜欢的朋友期望你能一键三连~
更多node相关知识 , 请访问:nodejs 教程!
以上就是了解Node.js Nestjs框架的模块机制 , 聊聊实现原理的详细内容 , 更多请关注电脑自学网其它相关文章!
【了解Node.js Nestjs框架的模块机制,聊聊实现原理】
推荐阅读
- 剑与远征8月26日兑换码分享-8月兑换码大全您需要了解的
- 帕斯卡契约星环之坠图鉴-星环之坠战利品介绍您需要了解的
- 养胃的一些禁忌你得了解 饥一顿饱一顿最易致胃病
- 小编详解win7正版多少钱新系统了解的东西
- 任务栏颜色,图文告诉您如何更改任务栏颜色新系统了解的东西
- Win7鼠标右键失效不能复制粘贴怎么办?小编教你新系统了解的东西
- 分享写优秀文案的5种方法 写优秀文案的方法有哪些?
- word打不开发送错误报告怎么办 word弹出错误报告解决方法新系统了解的东西
- Win7系统任务栏变宽变窄怎么还原?小编教你新系统了解的东西
- 网络不稳定是什么原因?小编教你Win7网络不稳定的解决方法新系统了解的东西