serveless 思想 Midway.js 框架使用教程(四)
前言
经过一段时间的使用,特此来分享框架的知识,如果觉着写的不错,请加微信领取前端教程,如果觉着写的不好,也请加微信领取前端教程!
依赖注入作用域
默认的未指定或者未声明的情况下,所有的 @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 框架使用教程(四)相关推荐
- mvc框架java包怎么划分,SpringMVC框架详细教程(四)_使用maven导入各个版本的Spring依赖包...
使用maven导入Spring依赖包 上一节讲了如何向动态Web项目添加下载的Spring依赖包,作为补充下面列出了如何使用 maven 导入Spring的依赖包,可以选择需要的导入(推荐)或者全部导 ...
- 全新的基于VVC思想的页面验证js框架vtor
2019独角兽企业重金招聘Python工程师标准>>> Vtor 1. 概述 vtor是一个全新的解耦合页面验证js框架.根据全新的VVC思想(validator-view ...
- 区块链教程(四):搭建私链、web3.js基础
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
- vassonic PHP,Node.js对接Hybrid框架VasSonic教程
腾讯由于有微信小程序等需要快速打开H5的场景,因此加速H5首屏打开效率就成了研发的重任.根据这两天腾讯发布的VasSonic来看,打开的效率确实提高了不少.本文将结合nodejs来对VasSonic框 ...
- 【JS-正则表达式】JS正则表达式完整教程(略长)
引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. ...
- 前端Js框架 UI框架汇总 特性 适用范围 选择
身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...
- 【原创】CSSOO的思想及CSS框架的应用(未整理完)
CSSOO的思想及CSS框架的应用 前语:通过这次研究分析总结,个人对CSSOO的概念及应用的思路也更明确一些,是一个和大家共同学习的过程. 一.CSS框架 框架目的: 给出一个相对规范的开发方法,给 ...
- Node.js 框架设计及企业 Node.js 基础建设相关讨论
大家好,我是若川.19年我写的 lodash源码 文章投稿到海镜大神知乎专栏竟然通过了,后来20年海镜大神还star了我的博客,同时还转发了我的微博.时间真快啊.今天分享这篇Node.js的讨论. 2 ...
- 简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景
随着web2.0的彪悍发展,以及浏览器端所承载的工作越来越大(在不是很影响性能的情况下,开发者都习惯把能用浏览器做的事儿都让浏览器做,以减轻服务器的压力和带宽费用等).所以Javascript已经成为 ...
最新文章
- python比java简单好学-是不是Python比Java更容易学,更容易就业?
- php怎么计算图片的大小,php 根据比例计算图片缩放尺寸函数的用法
- OpencvSharp的踩坑之路
- JAVA知识基础(八):继承
- java basic data type,java基本数据类型--Basic Datatypes
- 案例4-2 树种统计 (25 分)(map映射)
- 在 NXP iMX8 上进行 4K 视频播放测试
- 无限条码扫描枪,手机充当扫描器
- 「MRC干货」如何快速构建一台高精度AGV
- pycharm5.0.3在用QQ输入法候选框不跟随解决方法
- 数据结构与算法 入门 与 排序
- CAPTCHA(验证码)的来源与作用
- opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
- vb 计算机主板喇叭发声,主板蜂鸣器发声规律总结
- ContentType所有类型对比
- Caffe2 - (十)训练数据集创建
- C语言实现矩阵顺时针打印
- 【hadoop】MultipleOutputFormat和MultipleOutputs
- 微信公众平台群发规则说明
- 树莓派开发系列教程2——树莓派上手使用
热门文章
- python中二进制转8进制_Pythoner:教你二进制八进制十六进制的快速转化
- QCon北京2015报名火爆,4月8日提前停止售票
- python均线选股_GitHub - pkujf/Wind_Python: 量化开发 多因子选股模型
- mysql无法存储微表情、微信昵称包含微表情无法存储数据库
- 进程控制和通信(四)
- 初中毕业男生学计算机专业好吗,初中毕业男生学什么专业好
- java静态变量特点_Java中static的特点
- 闭环的OKR:OKR是工具,而非武器
- 深度学习多机多卡batchsize和学习率的关系
- pytorch实现数据集读取/下载