Отключение резервной копии Spring @Autowired по имени

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

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

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

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

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

@Autowired
Thingy foo;

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


person miah    schedule 17.05.2011    source источник


Ответы (3)


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

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

person abalogh    schedule 17.05.2011

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

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

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

person Sudhakar    schedule 13.08.2012