jakarta-ee - 如果某些注入的属性发生更改,则重新注入 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。
解决方案
如果您根本不使用弹簧,我建议:
- 让“bean”保持原样。(所以它将作为单例)。
- 在bean中添加一个方法:getConnection()
- 当属性更改时,在该 bean 内重新创建一个新连接。
- 任何需要连接的组件总是会调用 bean 的 getConnection() 并且它总是会得到最新的连接实例。
或者
您可能希望使用代理设计模式,其中您的 bean 由客户端使用,但在内部引用另一个连接 bean(“目标”bean),并且可以用全新 bean 的新实例替换目标。但始终,客户端/用户对代理持有相同的引用。
推荐阅读
- python - 在给定字符串中查找数据框的列值的pythonic方法
- python - 尝试使用 Python 脚本将数据从一个 Azure Blob 存储移动到另一个
- python - 使用 chrome 开发人员工具中的网络选项卡从任何网站提取 JSON 响应
- python - TDMS文件在python中读取数据
- mysql - NPM - MYSQL - 将查询结果传递给另一个变量
- reactjs - React Formik 从 api 加载数据
- java - Android WebView:只显示网页的一半
- spring-boot - 带有 H2 数据库的 JUnit - 是否将为每个测试用例复制 h2 内存
- javascript - 我想隐藏我的主堆栈导航器的标题
- flutter - Flutter Screen 中的图像选择器放置