Как сделать аннотацию Spring @autowired для выбора определенного типа без использования @Qualifier? - PullRequest
1 голос
/ 11 марта 2012

Есть ли способ указать тип по умолчанию для аннотации Spring @autowired?Например, у меня есть бин ValidatorA и бин ValidatorB, который расширяет ValidatorA.ValidatorA используется в некоторых других местах и ​​вводится с помощью @autowired.Есть ли способ заставить Spring внедрить ValidatorB вместо ValidatorA без изменения существующего кода?Единственное решение, которое я нашел на Как переопределить поведение Spring @ Autowired , предлагает исключить ValidatorA из контекста.Есть ли другой путь?Например, с Guice я бы просто связал ValidatorA.class с ValidatorB.class, и это будет делать именно то, что мне нужно.

У меня нет проблем с добавлением @Qualifier в ValidatorB, но ValidatorA должен остаться без изменений.Guice предоставляет возможность определять «провайдеров», есть ли что-то подобное в Spring?Может быть, с аннотацией @Configuration?

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Я думаю, вы могли бы использовать индикатор primary там. Если ваш компонент определен с помощью аннотации, добавьте @Primary к ValidatorB определению. Если вы используете конфигурацию xml, добавьте primary="true" к <bean> определению.

1 голос
/ 11 марта 2012

Есть ли способ заставить Spring ввести ValidatorB вместо ValidatorA без изменения существующего кода?

Без изменения кода я в этом очень сомневаюсь. Вы можете изменить контекст приложения или код примерно так:

@Component
@Qualifier("B")
public class ValidatorB extends ValidatorA {
}

, а затем внедрить так (есть другие синтаксические опции )

@Resource
@Qualifier("B")
private ValidatorA validatorB;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...