我有一个 Dropwizard 应用程序需要为配置列表中的每个配置生成十几个 bean。健康检查、石英调度程序等。
是这样的:
@Component
class MyModule {
@Inject
private MyConfiguration configuration;
@Bean
@Lazy
public QuartzModule quartzModule() {
return new QuartzModule(quartzConfiguration());
}
@Bean
@Lazy
public QuartzConfiguration quartzConfiguration() {
return this.configuration.getQuartzConfiguration();
}
@Bean
@Lazy
public HealthCheck healthCheck() throws SchedulerException {
return this.quartzModule().quartzHealthCheck();
}
}
我有多个 MyConfiguration 实例,它们都需要这样的 bean。现在我必须复制并粘贴这些定义并为每个新配置重命名它们。
我能否以某种方式遍历我的配置类并为每个配置类生成一组 bean 定义?
我可以使用子类化解决方案或任何类型安全的解决方案,而无需在每次我必须添加新服务时复制和粘贴相同的代码并重命名方法。
编辑:我应该补充一点,我还有其他依赖于这些 bean 的组件(例如,它们注入 Collection<HealthCheck>
。)
原文由 noah 发布,翻译遵循 CC BY-SA 4.0 许可协议
我能想到的“最佳”方法是将我所有的 Quartz 配置和调度程序包装在 1 个超级 bean 中,然后手动将其连接起来,然后重构代码以使用超级 bean 接口。
uber bean 在其 PostConstruct 中创建我需要的所有对象,并实现 ApplicationContextAware 以便它可以自动连接它们。这并不理想,但这是我能想到的最好的。
Spring 根本没有以类型安全的方式动态添加 bean 的好方法。