Обработка нескольких реализаций одного интерфейса Spring bean/
Скажем, мне нужно полагаться на несколько реализаций Spring bean. У меня есть один интерфейс AccountService
и две реализации: DefaultAccountServiceImpl
и SpecializedAccountServiceImpl
.
-
Как это возможно (вводя одну или другую реализацию) в Spring?
-
Какую реализацию будет использовать следующая инъекция?
@Autowired
private AccountService accountService;
Ответы
Ответ 1
Ad. 1: вы можете использовать @Qualifier
аннотацию или autwire, используя @Resource
, в отличие от @Autowired
, который по умолчанию использует имя поля, а не тип.
Ad. 2: во время выполнения он не работает, говоря, что два beans реализуют этот интерфейс. Если один из ваших beans дополнительно аннотирован с помощью @Primary
, это будет предпочтительнее при автоподготовке по типу.
Ответ 2
@Autowired
@Qualifier("impl1")
BaseInterface impl1;
@Autowired
@Qualifier("impl2")
BaseInterface impl2;
@Component(value="impl1")
public class Implementation1 implements BaseInterface {
}
@Component(value = "impl2")
public class Implementation2 implements BaseInterface {
}
For full code: https://github.com/rsingla/springautowire/