<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      AOP編程有三大場景:控制器切面,內(nèi)部切面,外部切面,你get到了嗎?

      如果用過NestJS框架都知道,在NestJS框架中AOP編程包括以下幾個能力:Middleware、Guard、Interceptor、Pipe、Filter。事實上AOP編程的應(yīng)用場景更廣泛,上述所列5個能力僅僅是AOP編程的子集。下面,我們看看在VonaJS框架中,AOP編程是怎樣的。

      VonaJS AOP編程

      VonaJS AOP 編程包括三個方面的能力:

      1. 控制器切面: 為 Controller 方法切入邏輯
      2. 內(nèi)部切面: 在 Class 內(nèi)部,為任何 Class 的任何方法切入邏輯
      3. 外部切面: 在不改變 Class 源碼的前提下,從外部為任何 Class 的任何方法切入邏輯

      控制器切面

      控制器切面清單

      • Middleware
      • Guard
      • Intercepter
      • Pipe
      • Filter

      執(zhí)行時序圖

      控制器切面的執(zhí)行時序圖如下:

      aspect-controller

      • 洋蔥模型: MiddlewareIntercepter支持洋蔥模型,允許在Controller Action之前和之后執(zhí)行切面邏輯
      • Middleware: 針對不同的執(zhí)行時序節(jié)點,系統(tǒng)提供了三種 Middleware: Middleware SystemMiddleware GlobalMiddleware Local,從而可以實現(xiàn)更精細化的切面邏輯
      • Route Match: 只有Middleware System在路由匹配之前執(zhí)行,其余在路由匹配之后執(zhí)行
      • Filter: 任何環(huán)節(jié)拋出異常,都會執(zhí)行Filter,從而自定義錯誤信息錯誤日志的處理邏輯

      內(nèi)部切面

      內(nèi)部切面提供兩個機制:AOP Method魔術(shù)方法

      1. AOP Method

      直接在 Class Method 上通過裝飾器切入邏輯

      舉例:數(shù)據(jù)庫事務(wù)

      class ServiceStudent {
      + @Database.transaction()
        async update(id: TableIdentity, student: DtoStudentUpdate) {
          return await this.scope.model.student.updateById(id, student);
        }
      }
      
      • @Database.transaction:通過AOP Method機制實現(xiàn)的裝飾器,可以直接提供數(shù)據(jù)庫事務(wù)能力

      舉例:日志

      class ServiceStudent {
      + @Log()
        async update(id: TableIdentity, student: DtoStudentUpdate) {
          return await this.scope.model.student.updateById(id, student);
        }
      }
      
      • @Log:通過AOP Method機制實現(xiàn)的裝飾器,可以直接提供日志能力

      2. 魔術(shù)方法

      可以在 Class 內(nèi)部通過__get____set__切入動態(tài)屬性或方法

      舉例:獲取 model 實例

      class ServiceStudent {
        async update(id: TableIdentity, student: DtoStudentUpdate) {
      +   return await this.scope.model.student.updateById(id, student);
        }
      }
      
      • this.scope.model.xxx: 沒有使用依賴注入,而是使用依賴查找,直接通過 scope 對象獲取 model 實例,從而簡化代碼的書寫風(fēng)格

      實現(xiàn)思路

      系統(tǒng)提供了一個 Class ServiceModelResolver,用于實現(xiàn) model 實例的動態(tài)解析,代碼如下:

      class ServiceModelResolver {
        protected __get__(prop: string) {
          const beanFullName = `${this[SymbolModuleScope]}.model.${prop}`;
          return this.bean._getBean(beanFullName as any);
        }
      }
      
      1. 當調(diào)用this.scope.model.student時,會自動執(zhí)行__get__方法,并且傳入?yún)?shù)prop: 'student'
      2. 將參數(shù)prop與當前模塊名稱合并成beanFullName
      3. 通過beanFullName從全局容器中獲取 model 實例,并返回給調(diào)用者

      外部切面

      仍以 Class ServiceStudentupdate方法為例,通過外部切面來實現(xiàn)日志能力:

      import { Aop } from 'vona-module-a-aspect';
      
      @Aop({ match: 'demo-student.service.student' })
      class AopLog {
        async update(_args: Parameters<any>, next: Function, _receiver: any) {
          const timeBegin = Date.now();
          const res = await next();
          const timeEnd = Date.now();
          console.log('time: ', timeEnd - timeBegin);
          return res;
        }
      }
      
      • @Aop: 此裝飾器用于實現(xiàn)外部切面
      • match: 用于將 Class AopLog與 Class ServiceStudent關(guān)聯(lián),ServiceStudent的 beanFullName 是demo-student.service.student
      • update: 在AopLog中提供與ServiceStudent同名的方法update,實現(xiàn)自定義邏輯即可

      資源

      posted @ 2025-10-10 10:23  濮水大叔  閱讀(283)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中文字幕精品亚洲字幕成| 成人网站免费观看永久视频下载| 亚洲精品日产AⅤ| 视频一区二区 国产视频| 亚洲一区二区精品动漫| 亚洲精品日韩精品久久| 亚洲 小说区 图片区 都市| 农村乱色一区二区高清视频| 好硬好湿好爽好深视频| 久热天堂在线视频精品伊人| 田阳县| 亚洲不卡一区三区三区四| 少妇被无套内谢免费看| 国产午夜亚洲精品不卡下载| 福利网午夜视频一区二区| 国产精品自拍中文字幕| 婷婷六月天在线| 欧美xxxx做受欧美| 色偷偷亚洲精品一区二区| 亚洲欧美偷国产日韩| 果冻传媒董小宛视频| 国产精品国产三级在线专区| 妺妺窝人体色www婷婷| 国产精品户外野外| 亚洲香蕉视频天天爽| 亚洲国产精品一区第二页| 色爱综合激情五月激情| 亚洲日本VA中文字幕在线| 欧美级特黄aaaaaa片| 亚洲欧洲色图片网站| 国产成人久久精品二三区| 日韩精品亚洲专在线电影| 99久久无码私人网站| 国产免费久久精品44| 亚洲国产综合精品 在线 一区| 久久精品蜜芽亚洲国产av| 久久久综合九色合综| 国产性生大片免费观看性| 中文字幕日韩精品人妻| 亚洲综合精品成人| 日韩一区二区三区精彩视频|