Для того, чтобы конечный пользователь мог видеть на экране своего устройства, любое Java-приложение имеет несколько объектов, которые взаимодействуют друг с другом. При написании масштабных и сложных проектов с использованием технологии Java, максимальная независимость классов друг от друга является критической. Это позволяет применять повторное использование кода и облегчает тестирование и поддержание проекта.
И здесь нам на помощь приходит такое понятие, как внедрение зависимостей, которое позволяет нам связывать эти классы друг с другом, при этом сохраняя их независимыми друг от друга.
Рассмотрим некое “сферическое” приложение “в вакууме” которое проверяет правильность ответа на определённый вопрос в ходе экзамена. Пример приложения: исходный код проекта можно скачать по ЭТОЙ ССЫЛКЕ.
Структура проекта:
Класс Exam.java:
Класс AnswerChecker.java:
Класс ExamRunner.java:
Конфигурационный файл exam-config.xml:
Результат работы программы:
Что мы можем видеть в этом приложении?
Класс Exam не должен беспокоиться о том, кто и как будет проверять правильность ответов. Его задача, просто “провести экзамен”, вызван экземпляр класса AnswerChecker, в котором и будет реализовано бизнес-логика проверки. Это значит, что при необходимости мы сможем просто написать другую реализацию проверки правильности ответа и вызвать экземпляр этого класса-“проверяльщика”.
Мы увидели, что внедрение зависимостей (DI) сделало более удобным и легко изменяемым даже такое маленькое и примитивное приложение. А когда Вы будете участвовать в разработке реальных проектов, Вы увидите, насколько DI облегчает жизнь разработчикам.