Aspect工具装饰器的使用示例

目前提供的@ohos.util工具中的Aspect 切面能力,示例比较简单,不能快速或完全了解如何使用,仅在当前类使用,能否提供配合装饰器使用的例子。

HarmonyOS
2024-04-28 23:44:31
888浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
胖头鱼圆滚滚

可以参考借鉴ts生态的一些AOP实践,比如利用装饰器实现AOP

https://juejin.cn/post/71053264915330498632. 一些ts的aop例子https://github.com/nullcc/ts-aop-example3. ts-aop的三方库https://www.npmjs.com/package/ts-aspect

注解可以 import Reflect-metadata鸿蒙的Aspect 只支持类方法的插装。以下是示例在EntryAbility.ets 文件下对 EntryAbility 进行插装

1、 对类 
util.Aspect.addBefore(EntryAbility, “onCreate”, false, (instance: EntryAbility, want: Want): void => { 
  let params = want.parameters as Record<string, Object>; 
  console.error('testtag 获取pid: '+params[‘ohos.aafwk.param.callerPid’]); 
}); 
 
2、 异步 
 
class Test { 
  static data:string = ‘initData’ 
  static async printData(arg: string) { // 异步方法 
    console.log(‘execute original printData’); 
    console.log('Test.data is ’ + Test.data); 
    console.log(arg); 
    return 0; 
  } 
} 
// 插桩 
util.Aspect.addBefore(Test, “printData”, true, 
(classObj: Object, arg: string): void => { 
  console.log(“execute before”); 
  Reflect.set(classObj, “data”, “dataChangedByBefore”); 
  console.log("arg is " + arg); 
} 
); 
 
Test.printData(“m1”).then((res) => { 
  console.log("res = " + res.toString()); 
  console.log("Test.data = " + Test.data); 
})
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

关于自定义装饰器,ArkTS支持TS5.0之前的TS装饰器语法,,如果在ets文件中定义装饰器,则需要同时满足ArkTS的语法规则,比如不能使用any等。

判断类型可以参照 util.types8当前只支持对类的函数进行插桩,不支持自定义装饰器,字节码插桩,UI组件插桩等

分享
微博
QQ
微信
回复
2024-04-29 16:03:47
相关问题
自定义装饰使用问题
1544浏览 • 1回复 待解决
应用卡片内部组件能使用装饰吗?
963浏览 • 1回复 待解决
HarmonyOS 关于组件装饰问题
978浏览 • 1回复 待解决
装饰 @Styles 和 @Extend
1411浏览 • 1回复 待解决
HarmonyOS 装饰问题class
844浏览 • 1回复 待解决
HarmonyOS @Concurrent装饰报错
933浏览 • 1回复 待解决
HarmonyOS Aspect能否hook CustomComponent?
928浏览 • 1回复 待解决
状态装饰 ui不刷新问题
3151浏览 • 1回复 待解决
@Watch装饰回调执行顺序
978浏览 • 1回复 待解决
HarmonyOS NodeContainer使用示例
1040浏览 • 1回复 待解决
@Track装饰有什么作用?
1559浏览 • 1回复 待解决
HarmonyOS @Observed装饰问题咨询
936浏览 • 1回复 待解决