Open Jzow opened 2 years ago
以下是我的个人想法, 目前如果需要实现aop大致需要解决三个问题: 1.文件扫描,能完成指定宏扫描功能。用于发现或补充struct(假设)。 2.容器ioc,这些类型发现后创建这些类型对象,并保存到集合中。 3.切入点,完成了发现类型,创建该类型的对象,则需要将这些对象注入到指定的切片层中。此时就需要完成的切入功能,例如针对函数的:环绕,before,after,return、returnError。
完成上述实现后,既可以在此基础上完善项目的aop封装。
容器ioc那一步是有点复杂,后面切入点 在方法之前 之后执行 可以通过属性宏
这是最终需要实现的效果,可以看一下图片。 开发者调用过程如下:
最后使用构建的切点,将函数切入到指定的目标函数中
before_test
这里是指定的函数名称吗,意味着定义任何name,#[package_lib::xxxxxx]
执行?
是的,我的想法是,具有一个基础的aop功能,供开发者使用,而具体功能性的aop,则在这个基础上二次开发
我们可以先把aop的之前之后可以先做好,织入点和环绕可以后面进行,但是我目前不清楚rust动态代理怎么实现
则在这个基础上二次开发
之前执行和之后执行,有点像动态代理模式,我们后面需要考虑到实现动态代理嘛
这块目前team里没有member负责研究,这是个公开讨论的问题,aop实现可以看看 crates.io 是否有一些crate支持