В нашем приложении есть требование поддерживать мульти-аренда. Каждый из подключенных клиентов может потенциально переопределить 1 или более beans или некоторые свойства bean, определенные на уровне базовой платформы (общий код/определения). Мне интересно, как лучше всего справиться с этим.
Переопределение bean, заданное в родительском контексте в дочернем контексте
Ответ 1
Spring позволяет вам повторно определять одно и то же имя bean несколько раз и принимает последнее определение bean, обработанное для данного имени, которое будет победителем. Например, у вас может быть XML файл, определяющий ваше ядро beans, и импортируйте его в XML файл, специфичный для клиента, который также переопределяет некоторые из этих beans. Это немного хрупко, хотя, поскольку нет никакого механизма, чтобы сказать "это определение bean является переопределением".
Я нашел, что самый чистый способ справиться с этим - использовать новый @Bean
-syntax, представленный в Spring 3. Вместо определения beans в качестве XML вы определяете их в Java. Таким образом, ваше ядро beans будет определено в одном классе @Bean
-annotated, а ваши конфиги клиента будут подклассифицировать это и переопределить соответствующий beans. Это позволяет использовать стандартные аннотации java @Override
, явно указывая на то, что заданное определение bean переопределяется.