Как использовать классификаторы CDI с несколькими реализациями классов?

Я новичок в Java EE / JSF и сейчас читаю о квалификаторах CDI - возможность изменить реализацию класса. Это здорово, но у меня есть один вопрос. Насколько я понимаю, я могу изменить реализацию класса, используя квалификатор, но мне нужно менять его везде, где я использую эту реализацию. Как лучше всего сделать это в одном месте? Благодаря моим небольшим знаниям о Java EE я понял это.

Давайте представим, что мы создаем простое приложение Калькулятор. Нам нужно создать несколько классов:

Calculator (базовая реализация калькулятора)ScientificCalculator (научная реализация калькулятора)MiniCalculator (с минимальной потенцией)MockCalculator (для юнит-тестов)спецификатор@Calculator (будет указывать на фактическую реализацию калькулятора; я должен создать классификатор для каждой реализации?)

Здесь вопрос. У меня есть четыре реализации калькулятора, и я хочу использовать одну из них в нескольких местах, но только по одной за раз (на начальном этапе проекта я буду использоватьMiniCalculator, тогдаCalculator и так далее). Как я могу изменить реализацию без кода изменения в каждом месте, где вводится объект? Должен ли я создать завод, который будет отвечать за инъекции и будет работать какmethod injector? Является ли мое решение правильным и значимым?

завод

@ApplicationScoped
public class CalculatorFctory implements Serializable {
    private Calculator calc;

    @Produces @Calculator Calculator getCalculator() {
        return new Calculator();
    }
}

Класс, который использует калькулятор

public class CalculateUserAge {
    @Calculator
    @Inject
    private Calculator calc;
}

Это правильное решение? Пожалуйста, поправьте меня, если я ошибаюсь или если есть лучшее решение. Спасибо!.

Ответы на вопрос(2)

Ваш ответ на вопрос