FastAop,一款基于 Java 编译时的 Aop 框架

2021-03-29 10:15:11 +08:00
 ychost

项目地址

https://github.com/fast-light/fastaop

项目刚上线,后面会持续维护,Maven 中央仓库还在申请中

项目简介

FastAop 是一款基于 Java Annotation Processing 的 AOP 框架,其原理和 Lombok 类似,通过对编译过程的拦截,修改方法的语法树并织入切面代码从而实现了 AOP 的功能,相较于传统的 AspectJ 、Spring-AOP 框架有如下特点:

  1. 依赖干净,无需 Spring 等环境
  2. 使用简单,仅需两个注解就能实现切面功能
  3. 性能好,由于是编译过程中植入原生代码,所以性能几乎无损
  4. 功能强大,支持 private 、static 等各种方法切面,内部方法相互调用也会过切面逻辑
  5. 扩展性好,提供了特定注解,能够在方法内部拿到当前切面上下文,便于做一些临时操作

项目由来

在写一些二方库的时候,有时候会有 aop 需求,但是又不想引入 AspectJ 或者 Spring 这种重量级的框架,那么 FastAop 就是你的另一个选择,原理和 Lombok 一样在编译的时候修改语法树注入的切面代码,目前已用在了生产环境,当然可以基于这个库可以生成任何你想要的模板代码,欢迎大家一起交流~

3537 次点击
所在节点    Java
29 条回复
cubecube
2021-03-30 00:59:46 +08:00
有 benchmark 么?运行时,已预热的的 benchmark 。
VHacker1989
2021-03-30 07:52:47 +08:00
早就有人做过了,比如 micronaut,把 aop,ioc 都做到了编译时,还支持 graalvm native build 。
LessonOne
2021-03-30 09:26:52 +08:00
@ychost 应该没人会在意 这 0.2%的差距吧???
ychost
2021-03-30 10:30:39 +08:00
@cubecube
@LessonOne
性能差异可以忽略,主要目的是可以自己生成模板代码,不光是 aop,其它你想要的都能生成
ychost
2021-03-30 10:35:54 +08:00
@VHacker1989 micronaut 这个很优秀,但是它这个是对标 Spring 这种生态级别的,目的不一样,我这个只是个小工具
ychost
2021-04-01 15:12:08 +08:00
稍微翻了下 micronaut aop 的源码,它那个是通过继承替换 Bean 实现切面的,所以不能切内部方法、静态方法,好处是生成的一抹多文件,没有改源文件,生成的代码都是继承于源文件
ychost
2021-04-01 15:12:21 +08:00
@LessonOne 稍微翻了下 micronaut aop 的源码,它那个是通过继承替换 Bean 实现切面的,所以不能切内部方法、静态方法,好处是生成的一抹多文件,没有改源文件,生成的代码都是继承于源文件
dk7952638
2021-12-15 08:03:12 +08:00
我觉得可以参照 dagger 的思路通过 annotation porcessor 来实现接口,在接口里生成 aop 过程比较好一些,lombok 的方式一不是规范,二兼容性和移植性太差
ychost
2021-12-15 18:30:28 +08:00
@dk7952638 谢谢,我看过 micronaut 的源码,写的很好,不过很重,我就想轻一点,不想做个 framework

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX