2013-04-19 2 views
0

Я пытаюсь создать фабричный класс, чтобы во время выполнения решить, что нужно вводить.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.

ответ

0

Вы должны ознакомиться с CDI Alternatives, который делает именно то, что вы ищете, без необходимости в заводах. В основном вы вводите классификатор «Alternate», который описывает нестандартные реализации и позволяет кому-то активировать его в beans.xml.

+0

Я хотел бы выбрать альтернативу на основе системных переключателей (либо в БД, либо в файле свойств) без изменения упакованного приложения. – Migore

+0

Тогда, возможно, вам нужно попробовать использовать квалификаторы, чтобы квалифицировать все экземпляры инжектируемого компонента. –

Смежные вопросы