java - 通过带注释的代码生成发送事件

标签 java annotation-processing

我有一堆方法在被调用时必须发送事件,比如像这样

public void someMethod(){
    sendEvent("someMethod was called");
    // the method does something
}    

public void someOtherMethod(){
    sendEvent("someOtherMethod was called");
    // the method does something
}

我想通过做类似的事情来避免 sendEvent 方法调用

@SendsEvent("someMethod was called")
public void someMethod(){  
    // do something  
}

我听说过注释处理是在构建时生成代码的一种方式。这可能吗?如果可以的话,你能给我指出正确的方向吗(教程或文档)。

PS:我在网上搜索了有关注释处理的教程,它们似乎都专注于使用反射 API 进行运行时注释处理。这不是我想要的。

最佳答案

我认为对于这个特性,注释处理不值得付出额外的努力和复杂性。注释处理器通常用于代码生成,但您似乎不需要为此用例生成任何动态代码。你必须:

  • 学习annotation processor和mirror api(类似于反射api但更复杂)
  • 将处理器集成到您的构建系统中
  • 让处理器生成监视注释方法的类。
    这个怎么做?有很多方法。您可以生成一个类来扩展您的类,添加事件调用,然后执行原始实现。其他解决方案可能涉及对所有内容的运行时处理,并且可以使用反射来完成
  • 找到一种方法来加载生成的类而不是你自己的实现(DI 或其他)

除非您实际上真的需要为此生成代码并在编译时做所有事情,否则您应该在应用程序启动时在运行时做所有事情。在开始时使用反射检查一次注释不应该以任何方式影响性能。使用Proxy拦截方法调用并添加事件调用。

关于java - 通过带注释的代码生成发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747342/

相关文章:

将对象添加到列表时的 Java 并发问题

java - 有关 Microsoft Access 的 JDBC 类型 4 驱动程序的反馈

Java 运行时相当于使用 javax Processor/google @AutoService 进行注释处理

java - 如何解析 Java 注释处理器中的 SwitchTree 表达式类型?

java - 注解和处理器之间的匹配

java - 我应该只将 Lucene 用于搜索吗?

java - 无法捕获 ConstraintViolationException

Hibernate Metamodel 注释处理器不识别 Kotlin 实体类

java - Gradle - 是否有可能在项目的其余部分之前编译单个 Java 类?

java - 在Java中,如何在给定的时间内播放声音?