首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找Java注释的简单方法

寻找Java注释的简单方法
EN

Stack Overflow用户
提问于 2010-10-30 03:47:05
回答 2查看 624关注 0票数 3

我从来没有用Java写过批注。

我有一个简单的Java类用于性能测量。我称它为PerfLog。下面是它的用法示例:

代码语言:javascript
运行
复制
public class MyClassToTest {
  public String MyMethod() {
    PerfLog p = new PerfLog("MyClassToTest", "MyMethod");
    try {
       // All the code that I want to time.
       return whatever;
    } finally {
       p.stop();
    }
  }
}

当调用p.stop()时,将在日志文件中写入一行:

代码语言:javascript
运行
复制
2010/10/29T14:30:00.00 MyClassToTest MyMethod elapsed time: 00:00:00.0105

是否可以将PerfLog重写为注释,以便我可以改为编写此代码?

代码语言:javascript
运行
复制
public class MyClassToTest {
  @PerfLog
  public String MyMethod() {
    // All the code I want to time.
    return whatever;
  }
}

它似乎是批注的一个很好的候选者:添加或删除批注很容易;生产构建可以完全省略PerfLog,而不必从源代码中删除批注;批注处理器可以获得类和方法名。

这很容易做到吗?有什么食谱可以让我照着做吗?

它必须是Java5,所以我知道我必须在某个地方使用apt。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-30 10:53:05

使用标准的Java工具没有简单的方法可以做到这一点。阻力最小的方法几乎肯定是使用面向方面编程风格的库,如Google Guice、Spring或AspectJ。任何解决这个问题的尝试基本上都会以AOP库已经为您做的事情而告终。

票数 1
EN

Stack Overflow用户

发布于 2010-10-30 03:55:36

考虑使用AOP或Spring支持的注释来拦截方法调用并实现自定义代码

如果这听起来很有趣,Spring AOP文档在这里:http://static.springsource.org/spring/docs/2.5.x/reference/aop.html

您绝对可以自己编写注释解析器及其运行时实现,但与行业解决方案相比,重新发明只会容易出错且效率低下。

如果你坚持自己实现这个(没有AOP或使用Spring的AOP ),下面是我的建议(可能不是最好的方法):

  1. 通过自定义FactoryBean always创建beans。
  2. 在自定义FactoryBean实现中,查询类中的方法并检查它们是否已注释。
  3. 如果已注释,则返回该实例的代理,而不是返回类本身的实例。
  4. 在调用此代理时,使用new PerfLog()和bean包装对实际实例的方法的调用

它实际上就是AOP (更强大的)为你做的事情。但是,请注意最终类、静态方法、没有接口的类等。在这种情况下仍然是一个问题(不同的球类比赛)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4055360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档