Когда разрешение зависимостей выполняется внешним агентом, а не самим классом, это называется внедрением зависимостей. Существует два стандартных способа внедрения зависимостей, которые поддерживаются в инфраструктуре Spring: с помощью аргумента конструктора или с помощью метода установки. Первый тип внедрения зависимостей известен как внедрение конструктора, а второй - как внедрение установщика. Оба метода используются для разных целей и имеют свои плюсы и минусы.
Внедрение конструктора против внедрения в сеттер
Разница между внедрением конструктора и внедрением сеттера заключается в том, что внедрение конструктора использует конструктор, а с другой стороны, внедрение установщика использует методы установки для внедрения зависимости. Эти два типа способов внедрения отличаются друг от друга по нескольким параметрам, таким как безопасность, удобочитаемость, поддержка неизменяемости и т. Д.
Внедрение конструктора - это тип внедрения зависимости в фреймворке Spring, который использует конструктор для внедрения зависимости. Зависимости, необходимые для любого из классов, указываются как параметры конструктора этого конкретного класса. Внедрение конструктора не позволяет разработчику создавать какой-либо объект, если не готовы все зависимости, и, таким образом, обеспечивает успешное внедрение зависимостей.
Внедрение установщика - это тип внедрения зависимости в инфраструктуру Spring, который использует методы установки для внедрения зависимости. Он имеет методы установки вида setXXX (), где XXX обозначает зависимость, которая вводит зависимые объекты в клиент. Этот способ разрешения зависимости очень распространен в среде Spring.
Таблица сравнения между внедрением конструктора и вводом сеттера
Параметры сравнения | Внедрение конструктора | Инъекция сеттера |
Зависимость введена | Он использует конструктор. | Он использует методы установки. |
Читаемость | По сравнению с сеттером он не очень удобочитаем. | Это более читабельно. |
Переопределить свойство | Невозможно переопределить зависимость. | Может отменять определенные зависимости. |
Изменения | Он всегда создает новый экземпляр компонента. | Он не создает никаких новых экземпляров компонента. |
Неизменность | Он поддерживает неизменность. | Не поддерживает. |
Что такое внедрение конструктора?
Внедрение конструктора - один из стандартных способов разрешения зависимостей в среде Spring, который статически определяет список зависимостей, необходимых для классов, путем назначения их в качестве параметров конструктору класса. Все классы, требующие зависимости, должны иметь внутри себя общедоступный конструктор, который принимает экземпляр в качестве аргумента конструктора, и этот конструктор обязательно должен быть единственным общедоступным конструктором внутри этого класса.
Если есть необходимость в нескольких зависимостях, тогда дополнительные аргументы должны быть добавлены в один и тот же конструктор. Чтобы гарантировать, что зависимость внедрена полностью, следует придерживаться единого принципа ответственности, который гласит, что участники должны делать только одно действие. Конструктор должен быть свободен от какой-либо другой логики, чтобы сделать конструктор классов более быстрым и надежным.
Одним из важных фактов внедрения конструктора является то, что объекты не будут построены, пока не будут готовы все зависимости. Поскольку он создает новые экземпляры каждый раз, когда вызывается конструктор, переопределение в нем невозможно. Внедрение конструктора в основном используется в тех случаях, когда необходимо создать объекты со всеми зависимостями. Это наиболее распространенный и простой способ правильно реализовать зависимости.
Что такое инъекция сеттера?
Внедрение сеттера - один из стандартных способов разрешения зависимости в среде Spring, который использует методы установщика для разрешения зависимостей. Методы установки имеют форму setXXX (), где XXX указывает зависимость, которую необходимо внедрить. В этом типе метода внедрения сначала создается объект, а затем внедряется зависимость. Для настройки Spring используются файлы XML, и поэтому удобство чтения является большой проблемой.
Поскольку методы-установщики имеют определенную форму имен методов, они во многих отношениях повышают удобочитаемость. Когда есть необходимость внедрить большее количество зависимостей, тогда тип внедрения установщика является очень предпочтительным и предпочтительным по сравнению с другими типами методов внедрения. В дополнение к этому, используя внедрение установщика, разработчики могут легко переопределить и изменить значения, потому что он не создает каждый раз новый экземпляр bean-компонента. Единственный недостаток внедрения установщика состоит в том, что он не обеспечивает полного внедрения зависимостей.
Нет никакой гарантии, есть ли у определенного объекта внедренная зависимость или нет. Другими словами, это означает, что может существовать объект с неполной зависимостью. Внедрение через сеттер - самый гибкий и самый распространенный способ реализации внедрения зависимостей.
Основные различия между внедрением конструктора и вводом сеттера
Вывод
Суть в том, что оба способа внедрения зависимостей, позволяющие либо внедрение конструктора, либо внедрение установщика, имеют свои плюсы и минусы. Вдобавок Spring не запрещает разработчикам использовать кого-либо, кроме рейтинга. Они могут свободно использовать как внедрение конструктора, так и внедрение установщика в одном файле конфигурации Spring. При внедрении зависимостей важно помнить о том, чтобы использовать инъекцию конструктора, когда есть обязательную потребность в создании объектов со всеми зависимостями, и использовать внедрение установщика, когда количество зависимостей больше или если есть необходимость в улучшении читаемость.
использованная литература
- https://digitalcommons.calpoly.edu/csse_fac/34/
- https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE