webentwicklung-frage-antwort-db.com.de

Wie initialisiere ich einen Spring Bean neu?

Ist es möglich, ein 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.

8
Fip

Sie haben drei Möglichkeiten, Singleton-Beans im Frühling zu aktualisieren. Sie können eine für Ihren Anwendungsfall geeignete auswählen:

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

Bean in Registry löschen & registrieren
Sie können DefaultSingletonBeanRegistry verwenden, um Ihre Bean zu entfernen und neu zu registrieren. Der einzige Nachteil dabei ist, dass alte Instanzen von 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 nach Konfigurationsänderungen. Aber es hat einen sehr begrenzten und spezifischen Zweck. Ressource um mehr darüber zu lesen.

8
Amith Kumar

Sie können Ihrer Anwendung eine Spring Cloud-Abhängigkeit hinzufügen und Ihre Bean mit den Anmerkungen @ConfigurationProperties und @RefreshScope kennzeichnen. Danach initialisiert der Aufruf von endpoint/refresh die @ Value-Eigenschaften in Ihrem Bean neu.

0
Igor Bljahhin