Метод @Bean, хотя и в разных классах, сталкивает Beans - PullRequest
0 голосов
/ 05 июля 2019

Предположим, у меня есть два одинаковых класса конфигурации, за исключением тега @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.

...