Переопределение bean-компонента, определенного в родительском контексте в дочернем контексте - PullRequest
22 голосов
/ 22 ноября 2010

Наше приложение требует поддержки мультитенантности.Каждый из прошедших проверку клиентов может потенциально переопределить 1 или несколько bean-компонентов или некоторые свойства bean-компонента, определенного на уровне базовой платформы (общий код / ​​определения).Мне интересно, как лучше всего справиться с этим.

1 Ответ

33 голосов
/ 22 ноября 2010

Spring позволяет вам переопределять одно и то же имя компонента несколько раз и принимает последнее определение компонента, обработанное для данного имени, как выигравшее.Например, у вас может быть XML-файл, определяющий ваши базовые компоненты, и импортировать его в специфичный для клиента XML-файл, который также переопределяет некоторые из этих компонентов.Это немного хрупко, так как нет механизма, который бы специально говорил «это определение бина является переопределением».

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

...