AOP对方法做执行前插桩、执行后插桩、替换方法

通过util.Aspect.addBefore、util.Aspect.addAfter、util.Aspect.replace这三个接口可以分别可以对方法做执行前插桩、执行后插桩、替换方法。

HarmonyOS
2024-05-23 21:48:11
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
kaijunx

使用的核心API

@ohos.util

util.Aspect.addBefore

util.Aspect.addAfter

util.Aspect.replace

核心代码解释

自定义类TestA

export class TestA{ 
data :string = 'testA' 
printData(arg:string){ 
  console.log('执行原始方法逻辑'); 
  console.log("data is " + this.data); 
  console.log("arg is "+ arg) 
  console.log('原始方法执行完毕'); 
} 
}

利用aop对原方法进行插粧

build() { 
Row() { 
  Column() { 
    Button("调用方法") 
      .fontSize(50) 
      .fontWeight(FontWeight.Bold) 
      .onClick(()=>{ 
        a.printData('a1') 
      }) 
    Button("对方法执行前后进行插粧") 
      .fontSize(50) 
      .fontWeight(FontWeight.Bold) 
      .onClick(()=>{ 
        //在方法执行前插粧 
        util.Aspect.addBefore(TestA,'printData',false,(instance: TestA, arg: string):void=>{ 
          console.log("执行addBefore逻辑----------"); 
        }) 
        //在方法执行后插粧 
        util.Aspect.addAfter(TestA,'printData',false,(instance: TestA, arg: string):void=>{ 
          console.log("执行addAfter逻辑----------"); 
        }) 
      }) 
    Button("替换原始方法") 
      .fontSize(50) 
      .fontWeight(FontWeight.Bold) 
      .onClick(()=>{ 
        //替换原始方法 
        util.Aspect.replace(TestA,'printData',false,(instance: TestA, arg: string):void=>{ 
          console.log("原始方法已被替换,不在执行,替换后方法直接打印传入参数,传入的参数为 "+ arg); 
        }) 
      }) 
  }

实现效果

第一次调用方法

对方法执行前后进行插粧后调用方法

替换原始方法后调用方法

注明适配的版本信息

 IDE:DevEco Studio 4.1.1.400

SDK:HarmoneyOS 4.1.0(11)

分享
微博
QQ
微信
回复
2024-05-24 21:06:45
相关问题
如何对异步方法进行/替换
306浏览 • 1回复 待解决
运行时AOPdemo测试
475浏览 • 1回复 待解决
基于AOP的代码,都有哪些场景?
262浏览 • 1回复 待解决
如何对namespace中的函数替换
344浏览 • 1回复 待解决
如何通过AOP统计方法执行时间
273浏览 • 1回复 待解决