Как зарегистрировать / отследить любой вызов метода объекта в Java - PullRequest
4 голосов
/ 29 августа 2011

Мне нужно что-то вроде декоратора Python.Мне нужно хранить некоторую информацию, в частности, вызываемый метод, время его начала, время окончания и аргументы.Я не могу импортировать что-либо вне библиотек Java 1.5.Есть ли что-то вроде того, что доступно в Python?

Ответы [ 6 ]

6 голосов
/ 29 августа 2011

Хорошим инструментом трассировки для Java является BTrace .

2 голосов
2 голосов
/ 29 августа 2011

Вы можете попробовать несколько профилировщиков, используя Java Management Extensions или java agent.

См. http://java.sun.com/developer/technicalArticles/releases/j2se15/#mnm

0 голосов
/ 03 февраля 2013

@Loggable аннотация и аспект AspectJ из jcabi-aspect могут вам помочь.Аннотируйте все ваши методы, и каждый раз, когда они будут вызываться, SLF4J будет получать сообщения журнала:

@Loggable(Loggable.DEBUG)
public String load(URL url) {
  return url.openConnection().getContent();
}

В следующих версиях jcabi-aspects будет реализована полная регистрация класса: https://github.com/yegor256/jcabi/issues/129

0 голосов
/ 19 января 2012

Вы можете получить класс Java Proxy, если можете полагаться только на методы интерфейса.

0 голосов
/ 29 августа 2011

Нет, декораторы Python не позволяют вам контролировать весь код, ничего не меняя. Вы все еще должны поместить свой декоратор повсюду (и - по существу - обернуть каждую из ваших функций в функцию, которая выполняет подсчет).

Я не уверен, что понимаю ваши требования (вы не говорите, нужен ли вам код для производства или тестирования; также требование "ничего не импортировать" является странным: все ваши классы в пакете по умолчанию? Вы разрешили использовать IDE и компилятор?), но я думаю, что самым простым способом было бы использовать Javassist (вторая ссылка, любезно предоставленная cschooley, является идеальным введением), но не используйте агент: вместо этого используйте CtClass # write ( ) для создания файлов классов инструментов и сохранения их на диск (возможно, в специальной задаче муравья). Таким образом, финальная сборка не требует специальной настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...