2016-06-17 4 views
0

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

  • 주석 공개 방법이있는 모든 클래스를 찾기

    1. 을 이어와 실제 가입자를 등록 않습니다 코드 이벤트 버스

    이 접근법과 관련된 문제점은 실제로 주입 된 가입자 만 등록한다는 것입니다. 초기화 됨. 이벤트를 게시하기 전에 사용되지 않은 구독자가 있으면 초기화되지 않습니다.

    hear 메서드에서 모든 구독자를 올바르게 찾을 수 있지만 (형식 마주 맞음에 주입 수신기를 등록하기 전에) 지연 시간이 초기화 되었기 때문에 인스턴스화되지 않았습니다.

    구독자에게 열렬한 인스턴스 생성 (binding.asEagerSingleton()과 유사)을하는 방법이 있습니까? 나는 그들이 싱글 톤인지 여부를 알아야 할 것입니다.

  • +1

    'Multibinder'를 사용하여 명시 적으로 모듈 구성에 등록 할 수 있습니다. –

    답변

    1

    저는 이전에 동일한 eventBus/guice 커플 링을했습니다.

    https://github.com/ronmamo/reflections 
    

    과 놀아서 @Subscribe로 주석 된 메소드가 포함 된 모든 클래스를 식별 한 다음 모듈 (bindEager)에 등록했습니다.