Автоматически назначать имя spring bean для предотвращения конфликтов имен?
В приложении spring, если два программиста разработают два пакета, аннотируя @Repository одному и тому же имени класса, spring выкинет "IllegalStateException":
Обозначенное имя bean "mybean" для класса bean[foobar.package1.mybean] конфликты с существующим, несовместимым beanопределение того же имени и класса [Foobar.package2.mybean]
Одним из решений является добавление дополнительного значения в @Repository, например @Repository("package1.mybean")
и @Repository("package2.mybean")
, но я ищу более эффективное решение, которое может автоматически облегчить такую ситуацию. Я надеюсь, что решение может достичь этих целей:
-
Программисты могут произвольно называть их bean className в своем пакете, независимо от имени, конфликтующего с другими пакетами (программисты). Так что программисту не нужно кричать "Эй, я собираюсь использовать имя bean XXXXX, не конфликтую со мной".
-
Не назначено имя XML bean вручную.
- Если имя bean может быть автоматически присвоено классу полного имени класса, это будет здорово.
Любые идеи? Благодарю.
(Spring 3)
Ответы
Ответ 1
Где-то в вашей конфигурации вы включили сканирование классов, возможно, используя
<context:component-scan>
Вы можете указать свойство с именем name-generator
, которое принимает bean, который реализует интерфейс BeanNameGenerator
. Создайте собственную реализацию этого интерфейса и дайте ссылку на него.