У меня есть приложение 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>
.)
BeanDefinitionRegistryPostProcessor
, либо выполнить некоторую магию контекстной иерархии (отдельные контексты для ваших модулей, в которых зависимости могут регистрироваться в родительском контексте), либо просто выполнить поиск службы вместо того, чтобы позволить Spring внедрить ваши зависимости (т.е.ApplicationContext#getBeansOfType
) . - person Pavel Horal   schedule 13.02.2015