Dependency Injection в Spring | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect MS SQL Server Developer Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик голосовых ассистентов и чат-ботов Administrator Linux. Advanced Infrastructure as a code Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Основы Windows Server
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Dependency Injection в Spring

Внедрение зависимости (DI — Dependency injection) — это процесс предоставления программному компоненту внешней зависимости. Согласно принципу единой обязанности, объект передает "заботу" о построении нужных ему зависимостей внешнему механизму, который специально для этого предназначен.

Каковы достоинства применения Dependency Injection и как DI реализуется в Spring?

Screenshot_4-1801-f279ae.png

Основные плюсы внедрения зависимости следующие: • сокращается объем связующего кода. Это одно из самых главных преимуществ, так как существенно уменьшается объем кода, который надо написать для связывания между собой разных компонентов приложения. Чаще всего этот код весьма прост — в процессе создания зависимости должен создаваться новый экземпляр соответствующего объекта; • упрощается конфигурация приложения. Благодаря применению Dependency Injection, процесс конфигурирования приложения существенно облегчается. В целях конфигурирования классов, которые можно внедрять в другие классы, используют аннотации либо файлы XML; • появляется возможность управлять общими зависимостями в одном репозитории. Когда речь идет о традиционном подходе к управлению зависимостями в общих службах (удаленные службы, транзакция, подключение к источнику данных и т. п.), разработчик создает экземпляры зависимостей (либо получает их из фабричных классов) там, где они действительно нужны, то есть внутри зависимого класса. Результат — распространение зависимостей по множеству классов в программном приложении, что, как известно, способно затруднить их изменение. Если же использовать DI, то вся информация об общих зависимостях находится в одном репозитории (в Spring можно хранить данную информацию в XML-файлах либо Java-классах), что значительно упрощает процесс управления зависимостями, и, как следствие, уменьшает число возможных ошибок; • улучшается возможность тестирования. Если классы проектируются для DI, появляется возможность простой замены зависимостей. Это весьма полезно при тестировании; • стимулируются качественные проектные решения. Собственно говоря, проектирование для Dependency Injection — это проектирование с применением интерфейсов. Используя Spring, разработчик получает в свое распоряжение широкий спектр DI-средств, поэтому он может сосредоточить свои силы на построении логики программного приложения, а не на платформе, поддерживающей DI.

Screenshot_3-1801-e14fa2.png

Реализация DI в Spring Framework

Реализация в Spring основана на 2-х ключевых Java-концепциях: интерфейсах и компонентах JavaBean. Используя Spring в качестве поставщика DI, разработчик получает гибкость определения конфигурации зависимостей внутри приложений разными путями: — внешне в XML-файлах; — посредством конфигурационных Java-классов Spring; — с помощью Java-аннотаций в коде).

Компоненты JavaBean (их еще называют Plain Old Java Object (POJO) — старый добрый объект Java) предоставляют стандартный механизм, позволяющий создавать Java-ресурсы, конфигурируемыми множеством способов. Благодаря применению Dependency Injection, объем кода, необходимого при проектировании программного приложения на основе интерфейсов, уменьшается почти до нуля. Вдобавок к этому, посредством интерфейсов вы можете получить наибольшую отдачу от DI, ведь бины способны использовать для удовлетворения их зависимости любую реализацию интерфейса.

Типы реализации

К типам реализации DI в Spring относятся: Constructor Dependency Injection. Зависимости компонента предоставляются ему в его конструкторе (конструкторах).

Screenshot_1-1801-8d6b97.png

Setter Dependency Injection. IoC-контейнер внедряет зависимости компонента в компонент, используя методы установки в стиле JavaBean.

Screenshot_2-1801-0cec3b.png

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться