Обработка нескольких реализаций одного интерфейса 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/