Spring MVC Bean Update (выполнить бин снова) - PullRequest
1 голос
/ 22 апреля 2020

Итак, я новичок в Spring MVC, и мне нужно обновить бин после определенного действия.

Пример: я определил следующий бин:

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

После того, как пользователь сделать вход в систему, мне нужно обновить бин, чтобы соответствовать языку, установленному в его профиле. Итак, как я могу снова вызвать (выполнить) компонент после входа в систему? Спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020

Это не стандартный способ обработки языкового стандарта пользователя. Я рекомендую хранить эту информацию в базе данных у самого пользователя, если характеристика c изменчива и варьируется у разных пользователей.

Однако один из лучших способов обновления бина во время выполнения - использование * 1003. *DefaultSingletonBeanRegistry, который все еще поддерживается в текущей версии Spring (5.2.x, насколько я знаю). На самом деле вы должны удалить компонент и зарегистрировать его снова с новым значением.

Начните с ConfigurableApplicationContext, который поможет вам получить DefaultSingletonBeanRegistry.

@Autowired
ConfigurableApplicationContext context;

И код удаления и регистрации бина должен выглядеть следующим образом:

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

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

Я никогда не использовал его на самом деле, но я нашел несколько примеров, которые могут быть полезны: Programcreek .

Важно: Я беспокоюсь, что этот способ не обновит / refre sh уже зарегистрированных старых введенных бобов. Я надеюсь, что кто-то может подтвердить / оспорить это утверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...