Предположим, у меня есть два одинаковых класса конфигурации, за исключением тега @Value, который сопоставлен с соответствующим свойством. Поскольку аннотированные методы @Bean этих классов имеют одинаковые имена, я получаю конфликты. Кажется, он не работает ни с использованием @Scope ("prototype"), ни с помощью метода bean () с использованием "this".
Мне нужно, чтобы все методы были @Beans, чтобы ими мог управлять контекст Spring.
Поскольку оба метода должны быть настроены со свойствами ClassA и ClassB, наследование не является хорошим подходом, а также динамическое внедрение компонентов в контекст с использованием фабрики / регистра.
Я знаю, как решить, как изменить имя bean () на beanA () и beanB (), но оно должно быть более чистым.
Мне нужно более чистое решение, чтобы избежать повторения кода. В настоящее время, если в ComplexObject добавлен новый сеттер, я должен изменить classA и ClassB. Представьте себе, что у вас 100 классов ... это было бы много работы.
@Configuration
public class ClassA{
....
@Value("${some-config.important-property}")
private String importantPropertyOnlyExistingInThisClass;
@Bean
@Scope("prototype")
public ComplexObject bean(){
ComplexObject o = new ComplexObject();
o.setImportantProp(this.importantPropertyOnlyExistingInThisClass)
return o;
}
@Bean
@Scope("prototype")
public AnotherComplexObject beanUsingBean(){
AnotherComplexObject aO = new AnotherComplexObject();
ao.setComplexObject(bean())
return aO;
}
}
@Configuration
public class ClassB{
....
@Value("${another-config.important-property}")
private String importantPropertyOnlyExistingInThisClass;
@Bean
@Scope("prototype")
public ComplexObject bean(){
ComplexObject o = new ComplexObject();
o.setImportantProp(this.importantPropertyOnlyExistingInThisClass)
return o;
}
@Bean
@Scope("prototype")
public AnotherComplexObject beanUsingBean(){
AnotherComplexObject aO = new AnotherComplexObject();
ao.setComplexObject(bean())
return aO;
}
}
Я ожидал бы иметь более простой способ инициализации подобных bean-компонентов с использованием конфигурации Java.