Guava EventBus을 사용 중이고 great example을 기반으로하는 유형 수신기를 통해 가입자를 등록합니다. 현재 코드는 한마디로이구아바 EventBus 가입자를위한 Guice TypeListener를 통한 열렬한 인스턴스화
bindListener(methodsAnnotatedWith(Subscribe.class), new TypeListener() {
@Override
public <I> void hear(TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
typeEncounter.register(new InjectionListener<I>() {
@Override
public void afterInjection(I i) {
register(i); // register with event bus
}
});
}
});
처럼 보이는 주입 후 @Subscribe
- 을 이어와 실제 가입자를 등록 않습니다 코드 이벤트 버스
이 접근법과 관련된 문제점은 실제로 주입 된 가입자 만 등록한다는 것입니다. 초기화 됨. 이벤트를 게시하기 전에 사용되지 않은 구독자가 있으면 초기화되지 않습니다.
hear
메서드에서 모든 구독자를 올바르게 찾을 수 있지만 (형식 마주 맞음에 주입 수신기를 등록하기 전에) 지연 시간이 초기화 되었기 때문에 인스턴스화되지 않았습니다.
구독자에게 열렬한 인스턴스 생성 (binding.asEagerSingleton()
과 유사)을하는 방법이 있습니까? 나는 그들이 싱글 톤인지 여부를 알아야 할 것입니다.
'Multibinder'를 사용하여 명시 적으로 모듈 구성에 등록 할 수 있습니다. –