Разница между внедрением конструктора и вводом сеттера (с таблицей)

Оглавление:

Anonim

Когда разрешение зависимостей выполняется внешним агентом, а не самим классом, это называется внедрением зависимостей. Существует два стандартных способа внедрения зависимостей, которые поддерживаются в инфраструктуре Spring: с помощью аргумента конструктора или с помощью метода установки. Первый тип внедрения зависимостей известен как внедрение конструктора, а второй - как внедрение установщика. Оба метода используются для разных целей и имеют свои плюсы и минусы.

Внедрение конструктора против внедрения в сеттер

Разница между внедрением конструктора и внедрением сеттера заключается в том, что внедрение конструктора использует конструктор, а с другой стороны, внедрение установщика использует методы установки для внедрения зависимости. Эти два типа способов внедрения отличаются друг от друга по нескольким параметрам, таким как безопасность, удобочитаемость, поддержка неизменяемости и т. Д.

Внедрение конструктора - это тип внедрения зависимости в фреймворке Spring, который использует конструктор для внедрения зависимости. Зависимости, необходимые для любого из классов, указываются как параметры конструктора этого конкретного класса. Внедрение конструктора не позволяет разработчику создавать какой-либо объект, если не готовы все зависимости, и, таким образом, обеспечивает успешное внедрение зависимостей.

Внедрение установщика - это тип внедрения зависимости в инфраструктуру Spring, который использует методы установки для внедрения зависимости. Он имеет методы установки вида setXXX (), где XXX обозначает зависимость, которая вводит зависимые объекты в клиент. Этот способ разрешения зависимости очень распространен в среде Spring.

Таблица сравнения между внедрением конструктора и вводом сеттера

Параметры сравнения

Внедрение конструктора

Инъекция сеттера

Зависимость введена Он использует конструктор. Он использует методы установки.
Читаемость По сравнению с сеттером он не очень удобочитаем. Это более читабельно.
Переопределить свойство Невозможно переопределить зависимость. Может отменять определенные зависимости.
Изменения Он всегда создает новый экземпляр компонента. Он не создает никаких новых экземпляров компонента.
Неизменность Он поддерживает неизменность. Не поддерживает.

Что такое внедрение конструктора?

Внедрение конструктора - один из стандартных способов разрешения зависимостей в среде Spring, который статически определяет список зависимостей, необходимых для классов, путем назначения их в качестве параметров конструктору класса. Все классы, требующие зависимости, должны иметь внутри себя общедоступный конструктор, который принимает экземпляр в качестве аргумента конструктора, и этот конструктор обязательно должен быть единственным общедоступным конструктором внутри этого класса.

Если есть необходимость в нескольких зависимостях, тогда дополнительные аргументы должны быть добавлены в один и тот же конструктор. Чтобы гарантировать, что зависимость внедрена полностью, следует придерживаться единого принципа ответственности, который гласит, что участники должны делать только одно действие. Конструктор должен быть свободен от какой-либо другой логики, чтобы сделать конструктор классов более быстрым и надежным.

Одним из важных фактов внедрения конструктора является то, что объекты не будут построены, пока не будут готовы все зависимости. Поскольку он создает новые экземпляры каждый раз, когда вызывается конструктор, переопределение в нем невозможно. Внедрение конструктора в основном используется в тех случаях, когда необходимо создать объекты со всеми зависимостями. Это наиболее распространенный и простой способ правильно реализовать зависимости.

Что такое инъекция сеттера?

Внедрение сеттера - один из стандартных способов разрешения зависимости в среде Spring, который использует методы установщика для разрешения зависимостей. Методы установки имеют форму setXXX (), где XXX указывает зависимость, которую необходимо внедрить. В этом типе метода внедрения сначала создается объект, а затем внедряется зависимость. Для настройки Spring используются файлы XML, и поэтому удобство чтения является большой проблемой.

Поскольку методы-установщики имеют определенную форму имен методов, они во многих отношениях повышают удобочитаемость. Когда есть необходимость внедрить большее количество зависимостей, тогда тип внедрения установщика является очень предпочтительным и предпочтительным по сравнению с другими типами методов внедрения. В дополнение к этому, используя внедрение установщика, разработчики могут легко переопределить и изменить значения, потому что он не создает каждый раз новый экземпляр bean-компонента. Единственный недостаток внедрения установщика состоит в том, что он не обеспечивает полного внедрения зависимостей.

Нет никакой гарантии, есть ли у определенного объекта внедренная зависимость или нет. Другими словами, это означает, что может существовать объект с неполной зависимостью. Внедрение через сеттер - самый гибкий и самый распространенный способ реализации внедрения зависимостей.

Основные различия между внедрением конструктора и вводом сеттера

Вывод

Суть в том, что оба способа внедрения зависимостей, позволяющие либо внедрение конструктора, либо внедрение установщика, имеют свои плюсы и минусы. Вдобавок Spring не запрещает разработчикам использовать кого-либо, кроме рейтинга. Они могут свободно использовать как внедрение конструктора, так и внедрение установщика в одном файле конфигурации Spring. При внедрении зависимостей важно помнить о том, чтобы использовать инъекцию конструктора, когда есть обязательную потребность в создании объектов со всеми зависимостями, и использовать внедрение установщика, когда количество зависимостей больше или если есть необходимость в улучшении читаемость.

использованная литература

  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Разница между внедрением конструктора и вводом сеттера (с таблицей)