如果某些注入的属性已更改,则重新注入CDI bean

时间:2019-03-21 00:13:02

标签: java-ee dependency-injection cdi weld

我有一个具有注入属性{ "mainThing": { "$ref": "foo" }, "things": [ { "$ref": "foo" }, { "$ref": "bar" } ] } 的bean BeanA:

private int url

让我们说这个class BeanA { @Value(${"db.url"}) private String url; private DbConnection connection; } 注释类似于Spring Value。在初始化期间,将使用url字段中的注入属性来初始化连接。此外,Value中还有一些PostConstruct and PreDestroy方法。 我的问题是:BeanA属性更改后,是否可以动态重新实例化BeanA。我有检测属性变化的机制。现在,我只重新注入该URL,但是我想重新创建此Bean,初始化新连接,然后在所有Dependetn Bean中重新注入此Bean。我不使用Spring Cloud Config。

1 个答案:

答案 0 :(得分:0)

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

  1. 将“ bean”保持原样。 (因此它将用作Singleton。)
  2. 在Bean中添加一个方法:getConnection()
  3. 属性更改后,在该bean内重新创建一个新连接。
  4. 任何需要连接的组件都将始终调用Bean的getConnection(),并将始终获取最新的连接实例。

OR

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