前言

经过一段时间的使用,特此来分享框架的知识,如果觉着写的不错,请加微信领取前端教程,如果觉着写的不好,也请加微信领取前端教程!

依赖注入作用域

默认的未指定或者未声明的情况下,所有的 @Provide 出来的 Class 的作用域都为 请求作用域。这意味着这些 Class ,会在每一次请求第一次调用时被实例化(new),请求结束后实例销毁。我们默认情况下的控制器(Controller)和服务(Service)都是这种作用域。

Midway 的依赖注入体系中,有三种作用域。

作用域 描述
Singleton 单例,全局唯一(进程级别)
Request 默认,请求作用域,生命周期绑定 请求链路,实例在请求链路上唯一,请求结束立即销毁
Prototype 原型作用域,每次调用都会重复创建一个新的对象

不同的作用域有不同的作用,单例 可以用来做进程级别的数据缓存,或者数据库连接等只需要执行一次的工作,同时单例由于全局唯一,只初始化一次,所以调用的时候速度比较快。而 请求作用域 则是大部分需要获取请求参数和数据的服务的选择,原型作用域 使用比较少(所以此处不做介绍),在一些特殊的场景下也有它独特的作用。

配置作用域 @Scope

如果我们需要将一个对象定义为其他两种作用域,需要额外的配置。Midway 提供了 @Scope 装饰器来定义一个类的作用域。下面的代码就将我们的 user 服务变成了一个全局唯一的实例。

// service
import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {//...
}

单例作用域

在显式配置后,某个类的作用域就可以变成单例作用域。

// service
import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {//...
}

后续不管获取这个类的实例多少次,在 同一个进程下,都是同一个实例。

比如基于上面的单例服务,下面两个注入的 userService 属性是同一个实例:

@Provide()
export class A {@Inject()userService: UserService//...
}@Provide()
export class B {@Inject()userService: UserService//...
}

请求作用域

默认情况下,代码中编写的类均为 请求作用域

在每个协议入口框架会自动创建一个请求作用域下的依赖注入容器,所有创建的实例都会绑定当前协议的上下文。

比如:

  • http 请求进来的时候,会创建一个请求作用域,每个 Controller 都是在请求路由时动态创建
  • 定时器触发,也相当于创建了请求作用域 ctx,我们可以通过@Inject()ctx可以拿到这个请求作用域。

所以在请求作用域中,我们可以通过 @Inject() 来注入当前的 ctx 对象。

import { Controller, Provide, Inject } from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';@Provide()  // 实际可省略
@Controller('/user')
export class UserController {@Inject()ctx: Context;//...
}

我们的 @Inject 装饰器也是在 当前类的作用域 下去寻找对象来注入的。比如,在 Singleton 作用域下,由于和请求不关联 ,默认没有 ctx 对象,所以注入 ctx 是不对的 。

@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {@Inject()ctx;                              // undefined//...
}

安装调试工具


输入命令yarn dev,在需要debugger的位置打上断点

Postman 中请求接口,可以看到代码执行到断点位置

参考:
https://juejin.cn/post/7100795036031254564
http://www.midwayjs.org/docs

serveless 思想 Midway.js 框架使用教程(四)相关推荐

  1. mvc框架java包怎么划分,SpringMVC框架详细教程(四)_使用maven导入各个版本的Spring依赖包...

    使用maven导入Spring依赖包 上一节讲了如何向动态Web项目添加下载的Spring依赖包,作为补充下面列出了如何使用 maven 导入Spring的依赖包,可以选择需要的导入(推荐)或者全部导 ...

  2. 全新的基于VVC思想的页面验证js框架vtor

    2019独角兽企业重金招聘Python工程师标准>>> Vtor 1.     概述  vtor是一个全新的解耦合页面验证js框架.根据全新的VVC思想(validator-view ...

  3. 区块链教程(四):搭建私链、web3.js基础

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  4. vassonic PHP,Node.js对接Hybrid框架VasSonic教程

    腾讯由于有微信小程序等需要快速打开H5的场景,因此加速H5首屏打开效率就成了研发的重任.根据这两天腾讯发布的VasSonic来看,打开的效率确实提高了不少.本文将结合nodejs来对VasSonic框 ...

  5. 【JS-正则表达式】JS正则表达式完整教程(略长)

    引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. ...

  6. 前端Js框架 UI框架汇总 特性 适用范围 选择

    身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...

  7. 【原创】CSSOO的思想及CSS框架的应用(未整理完)

    CSSOO的思想及CSS框架的应用 前语:通过这次研究分析总结,个人对CSSOO的概念及应用的思路也更明确一些,是一个和大家共同学习的过程. 一.CSS框架 框架目的: 给出一个相对规范的开发方法,给 ...

  8. Node.js 框架设计及企业 Node.js 基础建设相关讨论

    大家好,我是若川.19年我写的 lodash源码 文章投稿到海镜大神知乎专栏竟然通过了,后来20年海镜大神还star了我的博客,同时还转发了我的微博.时间真快啊.今天分享这篇Node.js的讨论. 2 ...

  9. 简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景

    随着web2.0的彪悍发展,以及浏览器端所承载的工作越来越大(在不是很影响性能的情况下,开发者都习惯把能用浏览器做的事儿都让浏览器做,以减轻服务器的压力和带宽费用等).所以Javascript已经成为 ...

最新文章

  1. python比java简单好学-是不是Python比Java更容易学,更容易就业?
  2. php怎么计算图片的大小,php 根据比例计算图片缩放尺寸函数的用法
  3. OpencvSharp的踩坑之路
  4. JAVA知识基础(八):继承
  5. java basic data type,java基本数据类型--Basic Datatypes
  6. 案例4-2 树种统计 (25 分)(map映射)
  7. 在 NXP iMX8 上进行 4K 视频播放测试
  8. 无限条码扫描枪,手机充当扫描器
  9. 「MRC干货」如何快速构建一台高精度AGV
  10. pycharm5.0.3在用QQ输入法候选框不跟随解决方法
  11. 数据结构与算法 入门 与 排序
  12. CAPTCHA(验证码)的来源与作用
  13. opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
  14. vb 计算机主板喇叭发声,主板蜂鸣器发声规律总结
  15. ContentType所有类型对比
  16. Caffe2 - (十)训练数据集创建
  17. C语言实现矩阵顺时针打印
  18. 【hadoop】MultipleOutputFormat和MultipleOutputs
  19. 微信公众平台群发规则说明
  20. 树莓派开发系列教程2——树莓派上手使用

热门文章

  1. python中二进制转8进制_Pythoner:教你二进制八进制十六进制的快速转化
  2. QCon北京2015报名火爆,4月8日提前停止售票
  3. python均线选股_GitHub - pkujf/Wind_Python: 量化开发 多因子选股模型
  4. mysql无法存储微表情、微信昵称包含微表情无法存储数据库
  5. 进程控制和通信(四)
  6. 初中毕业男生学计算机专业好吗,初中毕业男生学什么专业好
  7. java静态变量特点_Java中static的特点
  8. 闭环的OKR:OKR是工具,而非武器
  9. 深度学习多机多卡batchsize和学习率的关系
  10. pytorch实现数据集读取/下载