2013-06-01 3 views
1

Хотелось бы получить уведомление, когда any класс создан.Java: прослушиватель для когда * любой * класс создан?

Например, я хотел бы настроить слушателя, как следующий псевдокод:

addListener("onAnyClassCreated", myCallback); 

public void function myCallback(Object obj) 
{ 
    trace("obj was just created:" + obj.toString()); 
} 

, а затем для любого класса, созданный JVM для моего приложения, выше функция «myCallback» будет называется. Я мог бы управлять этим для своего собственного кода, но я хочу, чтобы он работал с любыми сторонними библиотеками, которые я использую.

+0

Зачем вы хотите это сделать? –

+2

Что относительно объектов, созданных в вашей функции myCallback? Я вижу как минимум два. Как вы избежите бесконечной рекурсии? Есть ли причина, по которой вы не использовали бы профилировщик для этого? –

+0

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

ответ

1

Возможно, вы захотите использовать профилирование для подсчета экземпляров определенного класса или если вы действительно хотите сделать то, что вы описали, это можно сделать с помощью инструментария инструментария. Например, Byteman.

+1

слушателю придется избегать создания объектов, которые снова вызовут прослушиватель. ;) –

+0

Использование Byteman фактически не требует модификации существующего кода, и вы не можете сами измерить инструмент инструментария. Таким образом, нет риска бесконечной рекурсии, как вы описали выше. Проверьте это руководство для получения дополнительной информации http://downloads.jboss.org/byteman/2.1.2/ProgrammersGuideSinglePage.html –

0

Я думаю, что то, чего вы пытаетесь достичь, может быть выполнено путем дистанционного управления вашей JVM. Классический способ сделать это - использовать Java Management Extensions (JMX).

Вы можете использовать существующий JMX-клиент, такой как JConsole или VisualVM. Вы также можете создавать свои собственные, если у вас есть особые потребности.

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