Я хотел бы создать несколько экземпляров bean-компонента CDI и далее вниз по дереву агрегирования выбрать реализацию интерфейса в зависимости от квалификатора.
В следующем примере я создаю два экземпляра Controller с квалификатором. Контроллер является частью базовой библиотеки, которая в нашем случае содержит несколько классов. Я хотел бы иметь возможность выбирать разные реализации Repository для двух разных контроллеров в зависимости от спецификатора.
Я мог бы создать @Producer для выбора между двумя реализациями Repository, но я не могу понять, как определить, какой экземпляр вернуть. У меня нет доступа к квалификатору, указанному в точке внедрения Контроллера, а только в точке внедрения Репозитория.
В настоящее время у нас есть две реализации Репозитория, живущие в разных войнах с зависимостью от ядра lib, что решило проблема, но я хотел бы иметь возможность изменить это.
Приложение
class MyApplication {
@Inject
@Component("comp1")
Controller controller1;
@Inject
@Component("comp2")
Controller controller2;
}
@Component("comp1")
public class Comp1Repository implements Repository {
}
@Component("comp2")
public class Comp2Repository implements Repository {
}
Базовая библиотека
public interface Repository {
}
public class Controller {
@Inject
Repository repository;
}