Spring позволяет вам переопределять одно и то же имя компонента несколько раз и принимает последнее определение компонента, обработанное для данного имени, как выигравшее.Например, у вас может быть XML-файл, определяющий ваши базовые компоненты, и импортировать его в специфичный для клиента XML-файл, который также переопределяет некоторые из этих компонентов.Это немного хрупко, так как нет механизма, который бы специально говорил «это определение бина является переопределением».
Я обнаружил, что самый чистый способ справиться с этим - использовать new @Bean
Синтаксис введен в Spring 3 .Вместо того, чтобы определять бины как XML, вы определяете их в Java.Таким образом, ваши базовые bean-компоненты будут определены в одном @Bean
-аннотированном классе, и ваши клиентские конфигурации будут наследовать его и переопределять соответствующие bean-компоненты.Это позволяет вам использовать стандартные аннотации java @Override
, явно указывающие на то, что данное определение компонента переопределяется.