Отключение Spring @Autowired по имени - PullRequest
2 голосов
/ 17 мая 2011

У меня определены следующие классы:

public interface Thingy { ... }
public class Foo implements Thingy { ... }
public class Bar implements Thingy { ... }

Классы Foo и Bar оба созданы как одноэлементные компоненты с одинаковыми именами, как в

<bean id="foo" class="Foo" />
<bean id="bar" class="Bar" />

Проблемапроисходит тогда, когда я пытаюсь автоматически связать поле с тем же именем, что и bean, например,

@Autowired
Thingy foo;

Здесь поле автоматически подключается с экземпляром Foo, и я этого не хочу.Если имя поля не совпадает с именем bean-компонента, автоматическая разметка отображается, и это желательно.Итак, есть ли способ отключить такой запасной вариант, так что автоматическое подключение в вышеуказанном случае завершится ошибкой?

Ответы [ 3 ]

2 голосов
/ 17 мая 2011

Я не думаю, что это возможно, наоборот, используя setFallbackToDefaultTypeMatch: javadoc: CommonAnnotationBeanPostProcessor

Почему бы вам просто не переименовать ни ваш компонент, ни вашкласс

0 голосов
/ 13 августа 2012

Вы можете использовать @Qualifier ("beanname"), чтобы убедиться, что вы вводите его с правильным bean-компонентом

0 голосов
/ 17 мая 2011

У меня есть пара предложений, чтобы помочь вам, хотя я не уверен, возможно ли то, что вы запрашиваете.

  1. Если вы не используете функцию сканирования пакетов аннотаций для обнаружения бинов, тогда я думаю, что в вашей конфигурации spring.xml вы можете указать ваши бины, чтобы иметь режим автоматического определения проводки.В желаемом компоненте вы указываете элемент 'autowire', и он имеет 4 или 5 возможных значений, определенных здесь .Я думаю, что вам нужен 'byType'.
  2. Вы также можете использовать аннотацию @ Qualifier .Это используется, когда у вас есть несколько бинов одного типа в контексте вашего приложения, чтобы помочь определить, какой бин вы на самом деле хотите использовать.
  3. Используйте другое имя.Возможно, это проще, чем вы надеялись, но я думаю, что это поможет решить вашу проблему.
...