2017-05-18 4 views
0

il y a une application de démarrage de ressort. et créer un événement comme UserCreateEvent et un auditeur UserCreateListenerdémarrage de printemps comment désinscrire gaava eventbus écouteur?

événement:

public class UserCreateEvent { 
    private Long userId; 
} 

auditeur:

@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); 
    } 
} 

maintenant, je veux désenregistrer le UserCreateListener après le démarrage de l'application de démarrage de printemps. comment puis-je faire Eventbus annuler l'enregistrement de cet événement et de l'auditeur ??

+0

Typo: '@ Comonent' =>' @ Component', pourriez-vous mettre à jour votre code s'il vous plaît –

+0

@ FrançoisMaturel ok, merci. –

+0

Pourquoi voulez-vous annuler l'inscription d'un composant que vous venez de créer? si vous n'en avez pas besoin, il suffit de supprimer l'annotation @Component ou d'utiliser l'annotation org.springframework.context.annotation.ComponentScan.Filter pour exclure UserCreateListener du contexte de démarrage du ressort – db80

Répondre

0

introduisons une méthode unregister() dans le UserCreateListener

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

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

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

Ensuite, si vous voulez annuler l'enregistrement s'autowired UserCreateListener (ou récupérer le grain de contexte d'application) et appelez listenerInstance.unregister()

MISE À JOUR

Créer votre propre composant et appeler désinscrire là. Supposons que l'écouteur et le eventbus sont des singletons.

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

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

l'auditeur est dans une bibliothèque tierce, je ne peux rien changer. Je veux le désinscrire dans mon contexte d'application. –

+0

la réponse mise à jour – StanislavL