Как использовать классификаторы 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;
}
Это правильное решение? Пожалуйста, поправьте меня, если я ошибаюсь или если есть лучшее решение. Спасибо!.