我需要一些像Python装饰器的东西。我需要存储一些信息,特别是调用的方法,它的开始时间,结束时间和参数。我无法导入Java 1.5库之外的任何内容。是否有一些像Python中可用的东西?
答案 0 :(得分:6)
Java的良好跟踪工具是BTrace。
答案 1 :(得分:2)
您可以使用Java Management Extensions或java代理尝试一些分析器。
请参阅http://java.sun.com/developer/technicalArticles/releases/j2se15/#mnm
答案 2 :(得分:2)
Java Instrumentation?
http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html
示例:
答案 3 :(得分:0)
不,Python装饰器不允许您监视所有代码而不更改任何内容。您仍然需要将装饰器放在任何地方(并且 - 基本上 - 将每个函数包装到一个执行计数的函数中)。
我不确定我是否理解你的要求(你没有说你是否需要生产或测试的代码;而且,“不要导入任何东西”的要求是奇怪的:你的所有类都在默认包中吗?是您是否允许使用IDE和编译器?),但我认为最简单的方法是使用Javassist(cschooley提供的第二个链接是一个完美的介绍),但不要使用代理:而是使用CtClass #write( )检测类文件并将其保存到磁盘(可能在自定义ant任务中)。这样最终的构建就不需要任何特殊的设置了。
答案 4 :(得分:0)
如果您只能依赖接口方法,那么您可能会使用Java Proxy
类。
答案 5 :(得分:0)
@Loggable
的jcabi-aspects注释和AspectJ方面可能会对您有所帮助。注释所有方法,每次调用它们时,SLF4J都会收到日志消息:
@Loggable(Loggable.DEBUG)
public String load(URL url) {
return url.openConnection().getContent();
}
在jcabi-aspects
的下一个版本中,将实现类的完整记录:https://github.com/yegor256/jcabi/issues/129