首页 > 解决方案 > 如果某些注入的属性发生更改,则重新注入 CDI bean

问题描述

我有一个注入属性的bean BeanA private int url

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

让我们说这个Value注解类似于 Spring Value。在初始化过程中,将使用注入属性到 url 字段来初始化连接。中也有一些PostConstruct and PreDestroy方法BeanA。我的问题是:是否可以在 属性更改BeanA时动态重新实例化。url我有检测属性变化的机制。现在,我只是重新注入这个 url,但我想重新创建这个 bean,初始化新连接并在所有依赖 bean 中重新注入这个 bean。我不使用 Spring Cloud Config。

标签: jakarta-eedependency-injectioncdiweld

解决方案


如果您根本不使用弹簧,我建议:

  1. 让“bean”保持原样。(所以它将作为单例)。
  2. 在bean中添加一个方法:getConnection()
  3. 当属性更改时,在该 bean 内重新创建一个新连接。
  4. 任何需要连接的组件总是会调用 bean 的 getConnection() 并且它总是会得到最新的连接实例。

或者

您可能希望使用代理设计模式,其中您的 bean 由客户端使用,但在内部引用另一个连接 bean(“目标”bean),并且可以用全新 bean 的新实例替换目标。但始终,客户端/用户对代理持有相同的引用。


推荐阅读