java - 如何根据配置创建多个与Spring bean同类型的实例?
问题描述
我试图弄清楚如何根据 application.properties 配置创建类的子类的多个实例 bean。
例如,基本上我有多个用于支付处理的后端服务,各自的集成构建为父集成类型的子类,比如:PaymentProcessorAlpha 和 ProcessorBeta,它们都扩展了 PaymentProcessor 类。
现在,看起来棘手的部分是,我希望能够为给定货币列表配置不同的处理器实例化对象(理想情况下是 Spring Bean,但如果它们只是对象,那没关系),如 application.properties 文件中配置的那样.
所以根据application.properties中的配置:
CurrencyProcessorStuff.processors.USD=alpha
CurrencyProcessorStuff.processors.CAD=alpha
CurrencyProcessorStuff.processors.GBP=beta
CurrencyProcessorStuff.processors.MXN=beta
CurrencyProcessorStuff.processors.AUS=beta
(我可以使用上面的配置来填充 CurrencyProcessorStuff Bean 的“处理器”映射属性,其中包含字符串、字符串的映射,即货币名称和处理器名称,即 <“USD”->“Alpha”、“CAD”- >“阿尔法”等...)
我想创建五个 PaymentProcessor 实例、两个 PaymentProcessorAlpha 子类型和三个 PaymentProcessorBeta 子类型,并且能够根据我目前处理的货币引用正确的实例,或者通过不同的 bean 名称, @Qualifier,或者简单地通过使用货币名称的键创建这些对象的 Map 。
我相信我可以解决这两种不同的方法,但感觉都不是很干净或像 Spring,所以我希望有更好的方法。
A) 我可以在配置中使用完整的类名,而不是“alpha”,我可以手动创建这些类名的新对象,并为自己构建一个 CurrencyName->ProcessorObjects 的映射。
我不喜欢这样,因为我必须手动编写完整的类名,保持一切同步,而且我没有得到 Spring Bean,只有 POJO。
B)我可以为每种处理器类型创建工厂类,将它们自动装配到由类名或限定符名标识的集合中,然后调用适当的工厂 Bean 为我的地图生成 POJO(类似于选项 A,但无需编码完整的类名进入 .properties 文件。
我看到了如何使用 Qualifier 通过自动装配来获取给定属性的 Bean 的正确子类型,但我还没有弄清楚如何获取每个子类型的多个实例并且有一种很好的命名/查找方法每个 bean 等...通过 .properties 文件配置进行管理。
任何想法将不胜感激!
解决方案
推荐阅读
- xml - 动态生成 XSD 时 XML 模式中根元素的定义不正确
- google-cloud-datastore - 使用 Google Cloud Datastore 和 Filter 请求问题
- icinga2 - Icinga2:在 db 中找不到通知历史记录
- r - 离散轴上刻度之间的自定义间距
- javascript - 使用 JQuery 选择给定父元素的子元素
- windows - 将桌面应用程序移植到支持 Microsoft 辅助功能的 64 位时出现问题
- javascript - 即使使用 html 或 css 在浏览器端完成设置,如何隐藏 Google 翻译器弹出窗口?
- xml - 如何使用 XSLT 获取项目符号黑色圆形而不是 html 代码
- python - 使用 europe-west1 时出现 Google Cloud Function Deploy 错误
- jquery - 提高 Ajax 请求性能以在 DataTable 中加载数百万条记录