簡體   English   中英

Spring MVC Bean 更新(再次執行 bean)

[英]Spring MVC Bean Update (Execute the bean again)

所以我是 Spring MVC 的新手,我需要在確定的操作后更新一個 bean。

示例:我定義了以下 bean:

@Bean
public LocaleResolver localeResolver(){
    CookieLocaleResolver resolver = new CookieLocaleResolver();
    resolver.setDefaultLocale(new Locale("en"));
    return resolver;
}

用戶登錄系統后,我需要更新 bean 以匹配他的配置文件中設置的語言。 那么,登錄后如何再次調用(執行)bean? 謝謝。

這不是處理用戶語言環境的標准方法。 我建議將此信息與用戶本身一起存儲在數據庫中,只要該特征是可變的並且在多個用戶之間變化。

但是,在運行時更新 bean 的最佳方法之一是使用DefaultSingletonBeanRegistry ,當前版本的 Spring(據我所知為 5.2.x)仍然支持它。 實際上,您所做的是刪除 bean 並使用新值重新注冊它。

從可幫助您獲取DefaultSingletonBeanRegistryConfigurableApplicationContext開始。

@Autowired
ConfigurableApplicationContext context;

一個bean的刪除和注冊代碼應該是這樣的:

LocaleResolver localeResolver = ... // a new bean to be registered, up to you :)

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton("localeResolver");
registry.registerSingleton("localeResolver", localeResolver);

我實際上從未使用過它,但我發現了一些可能有用的示例: Programcreek

重要提示:我擔心這種方式不會更新/刷新已經注冊的舊注入 bean。 我希望有人可以確認/反駁這一說法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM