Я пытаюсь создать фабричный класс, чтобы во время выполнения решить, что нужно вводить.Java указать значение по умолчанию
Я создал завод Производитель:
public class AuthorizationServiceFactory {
@Inject
private AuthorizationServiceImpl authorizationService;
@Produces
public AuthorizationService getService() {
//decide here
}
}
служба авторизации интерфейс:
public interface AuthorizationService {
//methods here
}
И у меня есть только одна реализация на интерфейс (я планирую иметь больше, но я упростив чтобы оно работало):
public class AuthorizationServiceImpl implements AuthorizationService {
//implementation here
}
В моем другом классе я пытаюсь ввести, например:
@Inject
protected AuthorizationService authorizationService;
Это дает мне Ambiguous dependencies for type [AuthorizationService] with qualifiers [@Any] at injection point blablabla...
я понял, что у него есть две возможности, производитель завод и сам Implmentation. Я попытался аннотировать метод фабрики с @Default и другим классом с помощью @Alternative, но затем мне нужно ввести AuthorizationServiceImpl на заводе, и он говорит, что он неактивен для инъекций.
Unsatisfied dependencies for type [AuthorizationServiceImpl] with qualifiers [@Default] at injection point blablabla...
Есть ли способ, чтобы указать, что фабричный метод, как он производит интерфейс и все еще быть в состоянии придать экземпляр, завод вернуть его без создания некоторых аннотаций интерфейсов?
Дополнительная информация, я на самом деле делаю это, потому что хочу, чтобы фабричный метод создавал надлежащую авторизацию на основе базы данных vaue.
Я хотел бы выбрать альтернативу на основе системных переключателей (либо в БД, либо в файле свойств) без изменения упакованного приложения. – Migore
Тогда, возможно, вам нужно попробовать использовать квалификаторы, чтобы квалифицировать все экземпляры инжектируемого компонента. –