Если вы используете Java 6, попробуйте jvisualvm из каталога bin JDK.
Одним из решений, которое я нашел, было создание просто дополнительного слушателя, который ищет определенный метод, такой как («init» или «start»), и просто вызывает его после создания и внедрения членов.
См. В конфигурации модуля:
@Override
protected void configure() {
bindListener(Matchers.any(), new InitMethodTypeListener());
//...
InitMethodTypeListener:
public class InitMethodTypeListener implements TypeListener {
private static final Logger log = LoggerFactory.getLogger(InitMethodTypeListener.class);
@SuppressWarnings("rawtypes")
static class InitInvoker implements InjectionListener {
@Override
public void afterInjection(final Object injectee) {
try {
log.info("Invoke init() from Class: {}", injectee.getClass().getName());
injectee.getClass().getMethod("init").invoke(injectee);
} catch (final Exception e) {
log.error(e.getMessage(), e);
}
}
public static final InitInvoker INSTANCE = new InitInvoker();
}
@SuppressWarnings("unchecked")
@Override
public <I> void hear(final TypeLiteral<I> type, final TypeEncounter<I> encounter) {
try {
if (type.getRawType().getMethod("init") != null) {
encounter.register(InitInvoker.INSTANCE);
}
} catch (final NoSuchMethodException | SecurityException e) {
// do nothing here, if not init-method found - no call
}
}
}
Возможно, это не прямой путь, но он работает. И поэтому я уверен, что все члены вводятся правильно, когда вызывается метод init.
В этой реализации все объекты, находящиеся под контролем, управляют своим «init» -методом, который будет вызываться автоматически после создания и внедрения объекта.