Зависимости:
- Weld - фреймворк для CDI в Java SE.
- Lombok - библиотека для упрощения Java-кода с помощью аннотаций.
Описание задачи:
Разработать CDI-компонент для вычисления тангенса угла разными методами: используя синус и косинус, а также только косинус. Способ вычисления должен быть выбран через аннотацию или конфигурацию в XML файле. Использовать перехватчики для сравнения времени выполнения различных методов.
Реализация:
Проект включает в себя реализацию вычисления тангенса с применением CDI и перехватчиков.
- Laboratory1: Основной класс для запуска CDI-контейнера, создания экземпляра
TanCalculatorи выполнения расчетов тангенса.
- ProfileInterceptor: Перехватчик для мониторинга времени выполнения методов калькуляторов. Используется для оценки производительности различных методов.
- COSINE_ONLY: Аннотация для калькулятора, который вычисляет тангенс только на основе косинуса.
- SINE_COSINE: Аннотация для калькулятора, который использует как синус, так и косинус для вычисления тангенса.
- TanParams: Интерфейс, определяющий метод
getValues()для получения значений параметров калькулятора. - CosOnlyParams: Класс для параметров, содержащих только косинус. Включает проверку, что косинус находится в диапазоне от -1 до 1 и не равен нулю.
- SinCosParams: Класс для параметров, содержащих синус и косинус. Проверяет, что синус и косинус находятся в пределах от -1 до 1 и что косинус не равен нулю.
- ITanCalculator: Интерфейс для калькуляторов тангенса, содержащий метод
calculate()для вычисления тангенса. - CosOnlyCalculator: Реализация интерфейса
ITanCalculator, использующая только косинус для вычисления тангенса. АннотированCOSINE_ONLY. - SinCosCalculator: Реализация интерфейса
ITanCalculator, использующая и синус, и косинус. АннотированSINE_COSINE.