Wie initialisiere ich eine Spring Bean neu?

Lesezeit: 2 Minuten

Ist es möglich, eine Spring Bean zur Laufzeit neu zu initialisieren?

Mein Bean verwendet statische Einstellungen, die sich in einigen Fällen ändern, und dann muss ich das Bean neu initialisieren.

  • Sie können über das Kontextrecht auf die Bean zugreifen und dann einfach eine Methode erstellen update innerhalb der Bean-Klasse, die Sie basierend auf Ihrem Trigger aufrufen können, um die Bean zu aktualisieren.

    – Amith Kumar

    6. Juli 2018 um 22:04 Uhr

  • Meine Bean ist eine Funktion innerhalb einer Konfigurationsklasse. Funktioniert eine Update-Funktion für diese Konstellation?

    – Fip

    6. Juli 2018 um 22:34 Uhr

  • Ja, selbst wenn Sie eine Bean aus einer Methode erstellen, ist sie immer noch ein Objekt im Spring-Kontext und kann wie auf jede andere Bean aufgerufen werden.

    – Amith Kumar

    6. Juli 2018 um 23:01 Uhr

Wie initialisiere ich eine Spring Bean neu
Amith Kumar

Sie haben drei Optionen zum Aktualisieren von Singleton-Beans im Frühjahrskontext. Sie können eine für Ihren Anwendungsfall geeignete auswählen:

Reload-Methode In the Bean

Erstellen Sie eine Methode in Ihrer Bean, die ihre Eigenschaften aktualisiert/neu lädt. Greifen Sie basierend auf Ihrem Trigger auf die Bean aus dem Frühlingskontext zu und rufen Sie dann die Reload-Methode auf, um die Bean-Eigenschaften zu aktualisieren (da Singleton) wird sie auch im Frühlingskontext aktualisiert und überall dort, wo sie automatisch verdrahtet/injiziert wird.

Bean in der Registrierung löschen und registrieren

Sie können verwenden DefaultSingletonBeanRegistry zum Entfernen und erneuten Registrieren Ihrer Bean. Der einzige Nachteil dabei ist, dass alte Instanzen von bereits automatisch verdrahteten/injizierten Beans in Consumer-Klassen nicht aktualisiert/neu geladen werden.

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache

@RefreshScope

Nützlich zum Aktualisieren von Bean-Werteigenschaften aus Konfigurationsänderungen. Aber es hat einen sehr begrenzten und spezifischen Zweck. Ressource um mehr darüber zu lesen.

  • Es ist so schwer, Eigenschaften neu zu laden.

    – Alex78191

    18. März 2019 um 17:55 Uhr

  • Warum nicht einfach bean = applicationContext.getBean(Bean.class)?

    – Alex78191

    18. März 2019 um 18:23 Uhr


  • Weil es Ihnen nur die bereits geladene Bean aus dem Kontext holt und sie nicht aktualisiert/neu lädt. Ich verstehe nicht, wenn du sagst, es ist so schwer ?

    – Amith Kumar

    18. März 2019 um 18:26 Uhr


  • In meinem Fall wird eine neue Bohne zurückgegeben applicationContext.getBean(Bean.class). Es ist wegen @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE).

    – Alex78191

    18. März 2019 um 18:47 Uhr

  • Ja, diese Frage gilt nicht für Nicht-Singleton-Bohnen. Der Prototyp-Umfang gilt pro Verwendung, sodass Ihre Bean für jede Anforderung neu erstellt wird, sodass keine Frage des Neuladens besteht.

    – Amith Kumar

    18. März 2019 um 20:07 Uhr

996290cookie-checkWie initialisiere ich eine Spring Bean neu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy