【发布时间】:2015-03-23 15:19:36
【问题描述】:
我正在考虑在编译时使用注解处理器为使用某种注解类型注解的类构建索引(甚至是存储在文件中的简单列表),以便在运行时加快注解类检索。
那么,这是一个好习惯吗?有什么缺点吗?如果它和我现在认为的一样好,为什么没有很多库可以轻松地做到这一点(我发现的唯一一个是Class Index)?而不是运行时处理有这么多?
【问题讨论】:
-
这听起来像premature optimization 对我来说。您是否执行过任何基准测试?
-
ClassIndex 做了一些有趣的基准测试,我自己没有做过。这可能是过早的优化,但问题仍然存在。我认为这也是我的图书馆的一个重要设计问题。
-
从您的链接中引用 大大加快 Java 应用程序引导,您(通常)会说多少次(通常)您的(或您的用户的)应用程序( s)通常在单次运行期间引导?最后,“Reflections Maven 插件”似乎表现得几乎一样好(在该单一发布的基准上)......
-
可能运行时处理更常见,因为它更有用且更强大。编译时处理仅适用于发现编译时可用的类(或其他)。想象一下,您正在使用注释使您的库可插入,或者因为您的库提供了最终用户应该在其代码中应用的注释(例如,Jackson)。编译时注释处理不是一个选项,因为在编译 your 库时代码中不存在此类注释。
-
@MattBall,如果客户端代码在
META-INF/services/javax.annotation.processing.Processor中,我的处理器不是在编译时运行吗??
标签: java annotations annotation-processing