Автосвязь по умолчанию с @Component

У меня есть интерфейс его 2 реализации. Я комментирую обе реализации @Component. Как я могу указать, что один из них будет bean-компонентом по умолчанию, когда он будет использоваться для ввода @Autowired по умолчанию.

Спасибо


person Loc Phan    schedule 25.10.2011    source источник


Ответы (2)


Используйте @Primary аннотация к компоненту, который, по вашему мнению, имеет более высокий приоритет.

из документа

Указывает, что bean-компоненту следует отдавать предпочтение, когда несколько кандидатов квалифицированы для автоматического связывания однозначной зависимости. Если среди кандидатов существует ровно один «первичный» bean-компонент, это будет значение автосвязывания.

Может использоваться в любом классе, прямо или косвенно аннотированном с помощью Component, или в методах, аннотированных с помощью Bean.

Использование Primary на уровне класса не имеет никакого эффекта, если не используется компонентное сканирование. Если класс с первичной аннотацией объявлен через XML, метаданные основной аннотации игнорируются, и вместо этого учитывается <bean primary="true|false"/>.

person jmj    schedule 25.10.2011
comment
Спасибо. К сожалению, наш проект использует Spring 2.5. Так что кажется, что я должен использовать Qualifier :'( - person Loc Phan; 25.10.2011

Autowired работает «по типу», что означает, что он может автоматически связываться, когда совпадает только один bean-компонент. При совпадении нескольких bean-компонентов используйте аннотации Autowired + Qualifier. Квалификатор вызывает имя bean-компонента для автоматического связывания.

Это означает, что когда вы объявляете Компоненты, вам также необходимо дать им имена.

person Kevin    schedule 25.10.2011