HarmonyOS 鸿蒙Next Aspect工具装饰器的使用示例
HarmonyOS 鸿蒙Next Aspect工具装饰器的使用示例 目前提供的@ohos.util工具中的Aspect切面能力,示例比较简单,不能快速或完全了解如何使用,仅在当前类使用,能否提供配合装饰器使用的例子。
3 回复
可以参考借鉴
- ts 生态的一些 AOP 实践,比如利用装饰器实现 AOP
- https://juejin.cn/post/7105326491533049863
- 一些 ts 的 aop 例子
- https://github.com/nullcc/ts-aop-example
- 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);
})
关于自定义装饰器,ArkTS 支持 TS5.0 之前的 TS 装饰器语法,如果在 ets 文件中定义装饰器,则需要同时满足 ArkTS 的语法规则,比如不能使用 any 等。
判断类型可以参照 util.types8 当前只支持对类的函数进行插桩,不支持自定义装饰器,字节码插桩,UI 组件插桩等
更多关于HarmonyOS 鸿蒙Next Aspect工具装饰器的使用示例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
如何对原生的组件点击和界面生命周期进行插码呢,
请注意,由于原始HTML内容中没有提供具体的文本或图片内容,转换后的Markdown文档仅包含上述文本。