2017-05-18 20 views
0

스프링 부트 응용 프로그램이 있습니다. 나는 UserCreateEvent 같은 이벤트를 만들고 리스너 UserCreateListenerspring boot 구아바 eventbus 리스너를 등록 해제하는 방법?

이벤트가 :

public class UserCreateEvent { 
    private Long userId; 
} 

청취자 :

@Component 
public class UserCreateListener { 
    @Autowired 
    private Eventbus eventbus; 

    @PostConstruct 
    public void init() { 
     this.eventbus.register(this) 
    } 

    @Subscribe 
    public void onUserCreate(UserCreateEvent event) { 
     Long userId = event.getUserId(); 
     // todo something necessary 
    } 

} 


@SpringBootApplication 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication application = new SpringApplication(Application.class); 
     application.run(args); 
    } 
} 

지금, 나는 봄 부팅 응용 프로그램 시작 후 UserCreateListener 등록을 취소하고자합니다. 어떻게하면 Eventbus이 이벤트와 수신기를 등록 취소 할 수 있습니까 ??

+0

오타는'@ Comonent' =>는'Component' @, 당신은 –

+0

@ FrançoisMaturel 확인, 덕분에 코드를하시기 바랍니다 업데이트 할 수 있습니다. –

+0

방금 ​​만든 구성 요소의 등록을 왜 취소 하시겠습니까? 필요없는 경우 @Component 주석을 제거하거나 annotation org.springframework.context.annotation.ComponentScan.Filter를 사용하여 Spring 부트 컨텍스트에서 UserCreateListener를 제외하십시오. – db80

답변

0

는 UserCreateListener를 autowire 얻을 등록을 취소 (또는 애플리케이션 컨텍스트에서 빈을 검색) 및 listenerInstance.unregister()

UPDATE

만들기를 호출 할 경우 그 다음 UserCreateListener

@Component 
public class UserCreateListener { 
    @Autowired 
    private Eventbus eventbus; 

    @PostConstruct 
    public void init() { 
     this.eventbus.register(this) 
    } 

    public void unregister() { 
     this.eventbus.unregister(this) 
    } 
} 

unregister() 방법을 소개하여 자신의 구성 요소를 호출하고 등록을 취소합니다. 리스너와 이벤트 버스가 싱글 톤이라고 생각해보십시오.

@Component 
public class MyUnregisterService { 
    @Autowired 
    private Eventbus eventbus; 
    @Autowired 
    private UserCreateListener listener; 

    public void unregister() { 
      eventbus.unregister(listener) 
    } 
} 
+0

청취자가 타사 라이브러리에 있으므로 아무 것도 변경할 수 없습니다. 내 응용 프로그램 컨텍스트에서 등록을 취소하고 싶습니다. –

+0

답변이 업데이트되었습니다. – StanislavL