Автоматически назначать имя 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. Создайте собственную реализацию этого интерфейса и дайте ссылку на него.