Как переустановить объект bean в ранее подключенных объектах? - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно переустановить экземпляр синглтон-компонента для всех ранее подключенных полей.

Я попытался удалить компонент из реестра в контексте приложения и заново зарегистрировать новый объект.

ConfigurableApplicationContext configContext = (ConfigurableApplicationContext)appContext;
SingletonBeanRegistry beanRegistry = configContext.getBeanFactory();
((DefaultListableBeanFactory) beanRegistry).destroySingleton("fbdProg");
((DefaultListableBeanFactory) beanRegistry).registerSingleton("fbdProg", program);

Работает только один раз, при первом вызове.

Проблема заключается в том, как переустановить компонент, чтобы сделать новый экземпляр доступным в других классах, где он автоматически подключен

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Каждый класс с аннотацией @Bean по умолчанию является одноэлементным при весенней загрузке, но вы можете предоставить аннотацию @Scope, если хотите, чтобы жизненный цикл переменной был связан с

  • сеанс
  • HTTP-запрос
  • спасательный круг сервлетаКонтекст

в любом случае вы должны иметь в виду, что @Bean должен быть одноэлементным, например, в паттерне персистентности у вас есть сущность и хранилище. Репозиторий должен быть одиночным, потому что он по существу дает только методы для хранения и извлечения сущностей, в то время как сущность не должна быть одиночной, потому что вам нужна сущность для каждого объекта, который вы должны хранить в базе данных. То же самое для услуг. Вы также можете взглянуть на эту статью: объемы пружинной загрузки

0 голосов
/ 28 мая 2019

Если вам нужен новый экземпляр этого компонента каждый раз, когда он вводится, вы можете использовать @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) в своем компоненте. Например:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MyComponent {
    // methods, fields, etc.
}

Затем Spring создает новый экземпляр MyComponent каждый раз, когда он внедряется в другой компонент. Таким образом, Bean A будет иметь другой экземпляр MyComponent, чем Bean B , оценивая beanA.myComponent != beanB.myComponent в true

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