Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AOP 初步探索以及方案 #60

Open
Jzow opened this issue Jun 30, 2022 · 7 comments
Open

AOP 初步探索以及方案 #60

Jzow opened this issue Jun 30, 2022 · 7 comments
Assignees
Labels
question Further information is requested

Comments

@Jzow
Copy link
Member

Jzow commented Jun 30, 2022

这块目前team里没有member负责研究,这是个公开讨论的问题,aop实现可以看看 crates.io 是否有一些crate支持

@Jzow Jzow added the question Further information is requested label Jun 30, 2022
@Jzow Jzow pinned this issue Jun 30, 2022
@Yangandmore
Copy link
Contributor

以下是我的个人想法,
目前如果需要实现aop大致需要解决三个问题:
1.文件扫描,能完成指定宏扫描功能。用于发现或补充struct(假设)。
2.容器ioc,这些类型发现后创建这些类型对象,并保存到集合中。
3.切入点,完成了发现类型,创建该类型的对象,则需要将这些对象注入到指定的切片层中。此时就需要完成的切入功能,例如针对函数的:环绕,before,after,return、returnError。

完成上述实现后,既可以在此基础上完善项目的aop封装。

@Jzow
Copy link
Member Author

Jzow commented Jul 1, 2022

容器ioc那一步是有点复杂,后面切入点 在方法之前 之后执行 可以通过属性宏

@Yangandmore Yangandmore self-assigned this Jul 8, 2022
@Yangandmore
Copy link
Contributor

image

这是最终需要实现的效果,可以看一下图片。 开发者调用过程如下: 1. 使用create_aspect构建开发者自己的切点 2. 使用before宏来设置切入点类型为前置,切入点的名字就是上面构建的切点 3. 最后使用构建的切点,将函数切入到指定的目标函数中

@Jzow
Copy link
Member Author

Jzow commented Jul 12, 2022

最后使用构建的切点,将函数切入到指定的目标函数中

before_test 这里是指定的函数名称吗,意味着定义任何name,#[package_lib::xxxxxx] 执行?

@Yangandmore
Copy link
Contributor

是的,我的想法是,具有一个基础的aop功能,供开发者使用,而具体功能性的aop,则在这个基础上二次开发

@Jzow
Copy link
Member Author

Jzow commented Jul 12, 2022

我们可以先把aop的之前之后可以先做好,织入点和环绕可以后面进行,但是我目前不清楚rust动态代理怎么实现

@Jzow
Copy link
Member Author

Jzow commented Jul 14, 2022

则在这个基础上二次开发

之前执行和之后执行,有点像动态代理模式,我们后面需要考虑到实现动态代理嘛

@Jzow Jzow unpinned this issue Sep 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
Status: No status
Development

No branches or pull requests

2 participants