Порядок внедрения & ldquo; MembersInjector & rdquo; а обычный метод & ldquo; Method & rdquo;

Если вы используете Java 6, попробуйте jvisualvm из каталога bin JDK.

0
задан Tony 18 January 2019 в 20:24
поделиться

1 ответ

Одним из решений, которое я нашел, было создание просто дополнительного слушателя, который ищет определенный метод, такой как («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» -методом, который будет вызываться автоматически после создания и внедрения объекта.

0
ответ дан Tony 18 January 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: