【发布时间】:2019-03-24 15:00:48
【问题描述】:
如果某些属性发生更改,例如 db url 连接,我想刷新 bean(销毁、初始化)。问题是这个 bean 可能已经被注入到 CDI 容器中的其他 bean 中。我对此有两个想法:
1. 如果 bean 被代理 - 销毁此代理的目标,重新初始化此代理内的目标。
2. 对于@Singleton 和@Dependent bean,因为它们没有被代理,所以我可以将这样的bean 包装在代理中并执行与上述相同的操作。
我想将它包装在代理中的原因是,当属性更改并且我想重新创建真实对象时,我还应该知道所有依赖于我的 bean 的依赖 bean。
所以我的问题是:
1.如何在CDI中替换proxy里面的真实对象?或者
2. 如果我不想像上面解释的那样保留代理,如何为我的bean创建代理对象并将其重新注入CDI容器中的所有依赖bean?
这是我之前的问题: Re-inject CDI bean if some injected property changed
再次,我使用 CDI (Weld),而不是 Spring IoC,所以我不能使用 Spring 云配置中的 @RefreshScope,但我认为我的预期功能可以与使用自定义范围相似。
【问题讨论】:
-
CDI 为您的真实 bean/类“生成”一个代理,该代理在其他 bean 中注入,仅更改 bean/类中的值有什么问题?
-
'Of' 应该是 'if'
标签: java dependency-injection proxy cdi weld