2008-10-17 6 views
3

Я хотел бы знать, как - если даже возможно - отражать, какие вызовы методов выполняются внутри метода во время выполнения. Меня особенно интересуют вызовы внешних методов (т. Е. Методы в других классах) или вызов определенного метода, такого как getDatabaseConnection().Действия метода отражения в Java

Мое намерение состояло в том, чтобы отслеживать действия предопределенных объектов внутри методов и выполнять дополнительный код, если выполняются некоторые конкретные условия, как вызван какой-то метод с определенными значениями. Монитор будет полностью внешним классом или набором классов, не имеющих прямого доступа к объекту, который будет контролироваться никаким другим способом, кроме отражения.

ответ

1

Я ожидаю BCEL для этого. На веб-сайте:

The Byte Code Engineering Library является целью дать пользователям удобный возможность анализировать, создавать и манипулируют (бинарные) файлы классов Java (те, заканчивая .class).

«Рассматриваемая» часть является важным битом здесь. JavaDoc не отображается на веб-сайте (насколько я вижу), поэтому я не могу быть уверенным, поможет ли вам это, но это разумная отправная точка.

1

BCEL должны предложить такую ​​возможность, но ...

... ваши требования звучат много как аспектно-ориентированное программирование (АОП), так что вы, вероятно, следует также посмотреть на AspectJEclipse tooling).

Главным преимуществом AspectJ является то, что он предлагает хорошо продуманный способ выразить ваши конкретные условия.

2

Aspect J решит вашу проблему.

Попробуйте определить Pointcut так:

pointcut profilling(): execution(public * *(..)) && (
      within(com.myPackage..*) || 

Таким образом, вы будете ловить весь призыв к любому общедоступному методу в рамках пакета com.myPackage. Добавьте столько предложений внутри, которые вам нужны.

Затем добавьте следующий код:

Object around(): profilling() { 

    //Do wherever you need before method call 
    proceed(); 
    //Do wherever you need after method call 

} 

Если вы хотите узнать что-то больше о AspectJ следовать этой guide.

Смежные вопросы