В следующем Spring Java Config:Реферирование боб с зависимостями с помощью Spring Java Config
@Configuration
@EnableAutoConfiguration
@ComponentScan("my.package")
public class Config {
@Bean
public BasicBean basicBean1() {
return new BasicBean("1");
}
@Bean
public BasicBean basicBean2() {
return new BasicBean("2");
}
@Bean
public ComplexBean complexBeanByParameters(List<BasicBean> basicBeans) {
return new ComplexBean(basicBeans);
}
@Bean
public ComplexBean complexBeanByReferences() {
return new ComplexBean(Arrays.asList(basicBean1(), basicBean2()));
}
}
Я могу создать два ComplexBean
сек, используя либо инъекции параметр, который является элегантный, но имеет недостатки, если есть несколько других beans типа BasicBean
и только некоторые из них (параметры могут, конечно, иметь тип BasicBean
и перечислять по имени компоненты, которые меня интересуют, но это может оказаться очень длинным списком, по крайней мере для аргументов). В случае, если я хочу напрямую ссылаться на bean-компоненты, я могу использовать стиль complexBeanByReferences
, который может быть полезен в случае заказа или какого-либо другого рассмотрения.
Но сказать, что я хочу использовать complexBeanByReference
стиль для ссылки на компонент complexBeanByParameters
, то есть что-то вдоль линии:
@Bean
public ComplexBeanRegistry complexBeanRegistry() {
return new ComplexBeanRegistry(
Arrays.asList(
complexBeanByParameters(), // but this will not work!
complexBeanByReferences()
)
);
}
Как бы ссылаться complexBeanByParameters
, без необходимости указывать список зависимостей для complexBeanRegistry
? Который, последний по всей честности должен быть полностью забыт.
Существует возможность просто использовать
public ComplexBeanRegistry complexBeanRegistry(List<ComplexBeans> complexBeans) {...}
конечно, но это не может быть вариант, в некоторых случаях, в частности при использовании CacheConfigurer
из spring-context
. В этом случае Java Config предназначена для
- создать бобы
- путем реализации
CacheConfigurer
, переопределения экземпляров по умолчанию дляCacheManager
иKeyGenerator
бобов.
Требование к внедрению CacheConfigurer
означает, что я не могу изменить подпись для использования инъекции параметров.
Итак, вопрос в том, есть ли способ ссылки complexBeanByParameters
с использованием «прямого» эталонного стиля?
Мое текущее решение является разделить мою конфигурацию в виде отдельных файлов, а также автоматического связывания боб из один config, введя его в декларацию bean-компонента CacheConfigurer - аналог должен был бы иметь 'complexBeanRegistry', объявленный в отдельной конфигурации, и autowire' complexBeanByParameters' bean. – zrvan