我从未在Java中编写过注释。
我有一个简单的Java类用于性能测量。我称之为PerfLog。以下是其使用示例:
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()时,会将一行写入日志文件:
2010/10/29T14:30:00.00 MyClassToTest MyMethod elapsed time: 00:00:00.0105
可以将PerfLog重写为注释,以便我可以写这个吗?
public class MyClassToTest {
@PerfLog
public String MyMethod() {
// All the code I want to time.
return whatever;
}
}
它似乎是一个很好的候选注释:添加或删除注释很容易;生产构建可以完全忽略PerfLog,而无需从源代码中删除注释;注释处理器可以获取类和方法名称。
这很容易吗?有没有我可以遵循的食谱?
它必须是Java 5所以我知道我必须在某处使用apt。
答案 0 :(得分:1)
考虑使用AOP或Spring - 支持Annotations来拦截方法调用并实现自定义代码
如果听起来很有趣,那么Spring AOP文档就在这里:http://static.springsource.org/spring/docs/2.5.x/reference/aop.html
您绝对可以自己编写注释解析器及其运行时实现,但与行业解决方案相比,重新发明只会出错并且效率低下。
如果你坚持自己实现这个(没有使用Spring的AOP或AOP),我可以建议这里(可能不是最好的方法):
new PerfLog()
和p.stop()
它实际上是AOP(更有力)为你做的事情。但是,请注意最终类,静态方法,没有接口等的类......在这种情况下仍然是一个问题(一个不同的球类游戏)。
答案 1 :(得分:1)
使用标准Java工具执行此操作并不是一件容易的事。阻力最小的路径几乎肯定是使用像Google Guice或Spring或AspectJ这样的AOP风格的库。任何解决这个问题的本土尝试都将最终完成AOP库已经为您做的事情。