Повторно внедрить bean-компонент CDI, если изменилось какое-либо внедренное свойство - PullRequest
0 голосов
/ 21 марта 2019

У меня есть bean-компонент BeanA с внедренным свойством private int url:

class BeanA { @Value(${"db.url"}) private String url; private DbConnection connection; }

Допустим, эта аннотация Value похожа на Spring Value.Во время инициализации соединение будет инициализировано с использованием свойства injected в поле url.А также есть PostConstruct and PreDestroy методы в BeanA.Мой вопрос: возможно ли динамически восстановить BeanA при изменении свойства url.У меня есть механизм обнаружения изменения свойства.Пока я просто повторно внедряю только этот URL, но хочу воссоздать этот компонент, инициализировать новое соединение и повторно внедрить этот компонент во все зависимые компоненты.Я не использую Spring Cloud Config.

1 Ответ

0 голосов
/ 21 марта 2019

Если вы вообще не используете пружину, я предлагаю:

  1. Оставьте "боб" как есть. (Так будет служить синглтон).
  2. добавить метод в bean-компоненте: getConnection ()
  3. Когда свойство изменяется, заново создайте новое соединение внутри этого компонента.
  4. Любой компонент, которому требуется соединение, всегда будет вызывать метод beConnection () компонента и всегда получит самый обновленный экземпляр соединения.

OR

Возможно, вы захотите использовать шаблон проектирования Proxy, в котором ваш бин используется клиентом, но внутренне ссылается на другой бин соединения («целевой» бин), и цель может быть заменена новым экземпляром совершенно нового бина. Но всегда клиент / пользователь содержит одну и ту же ссылку на прокси.

...