我有一堆方法在被调用时必须发送事件,比如像这样
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/