Когда разрешение зависимостей выполняется внешним агентом, а не самим классом, это называется внедрением зависимостей.
В среде Spring поддерживаются два стандартных способа внедрения зависимостей: через аргумент конструктора или с помощью метода установки.
Первый тип внедрения зависимостей известен как конструктор инъекция, а последняя известна как инъекция сеттера. Оба метода используются для разных целей и имеют свои плюсы и минусы.
Основные выводы
- Внедрение конструктора обеспечивает полное создание объекта со всеми зависимостями; инъекция сеттера позволяет частично создавать объект.
- Внедрение конструктора способствует неизменности; инъекция сеттера позволяет изменять объекты.
- Внедрение конструктора предотвращает циклические зависимости; инъекция сеттера может привести к циклическим зависимостям.
Инъекция конструктора против инъекции сеттера
Внедрение конструктора — это тип внедрения зависимостей в инфраструктуре Spring, который использует конструктор для внедрения зависимости. Внедрение установщика — это тип внедрения зависимостей в инфраструктуре Spring, который использует методы установки для внедрения зависимости. Он может вводить частичную зависимость и является более гибким.
Внедрение конструктора — это тип внедрения зависимостей в инфраструктуре Spring, который использует конструктор для внедрения зависимости. Зависимости, необходимые для любого из классов, указываются в качестве параметров конструктора этого конкретного класса.
Внедрение конструктора не позволяет разработчику создавать какой-либо объект, если все зависимости не готовы, и, таким образом, обеспечивает успешное внедрение зависимостей.
Внедрение установщика — это тип внедрения зависимостей в среде Spring, который использует методы установки для внедрения зависимости. У него есть методы-установщики вида set XYZ(), где XYZ обозначает зависимость, которая внедряет зависимые объекты в клиент.
Этот способ разрешения зависимости очень распространен в среде Spring.
Сравнительная таблица
Параметры сравнения | Внедрение конструктора | Инъекция сеттера |
---|---|---|
Зависимость введена | Он использует конструктор. | Он использует методы установки. |
читабельность | Это не очень читабельно по сравнению с сеттером. | Это более читабельно. |
Переопределить свойство | Невозможно переопределить зависимость. | Может переопределять определенные зависимости. |
изменения | Он всегда создает новый экземпляр компонента. | Он не создает новый экземпляр компонента. |
неизменность | Он поддерживает неизменность. | Он не поддерживает. |
Что такое внедрение конструктора?
Внедрение конструктора — это один из стандартных способов разрешения зависимости в среде Spring, который статически определяет список зависимостей, необходимых для классов, путем назначения их в качестве параметров конструктору класса.
Все классы, требующие зависимости, должны иметь внутри себя общедоступный конструктор, который принимает экземпляр в качестве аргумента конструктора, и этот конструктор обязательно должен быть единственным общедоступным конструктором внутри этого класса.
Если есть необходимость в более чем одной зависимости, то дополнительные аргументы должны быть добавлены в тот же конструктор. Следует соблюдать принцип единой ответственности, чтобы гарантировать полное введение зависимости, в котором говорится, что члены должны делать только одну вещь.
Конструктор должен быть свободен от какой-либо другой логики, чтобы сделать конструктор классов более быстрым и надежным.
Одним из важных фактов внедрения конструктора является то, что объекты не будут созданы, пока не будут готовы все зависимости. Поскольку он создает новые экземпляры каждый раз, когда вызывается конструктор, переопределение в нем невозможно.
Внедрение в конструктор в основном используется в тех случаях, когда есть необходимость создать объекты со всеми зависимостями. Это наиболее применимый и простой способ корректной реализации зависимостей.
Что такое сеттер-инъекция?
Внедрение установщика — это один из стандартных способов разрешения зависимостей в среде Spring, который использует методы установщика для разрешения зависимостей. Методы установки имеют вид set XYZ(), где XYZ указывает зависимость, которую необходимо внедрить.
В этом типе метода внедрения сначала создается объект, а затем внедряется зависимость. Для настройки Spring, XML используются файлы; таким образом, удобочитаемость является большой проблемой.
Поскольку методы-установщики имеют определенную форму имен методов, это во многих отношениях улучшает читабельность. Когда есть необходимость внедрить большее количество зависимостей, то тип внедрения сеттера очень предпочтителен и предпочтителен по сравнению с другими типами методов внедрения.
В дополнение к этому, используя инъекцию сеттера, разработчики могут легко переопределять и изменять значения, поскольку при этом не создается каждый раз новый экземпляр компонента. Единственным недостатком внедрения сеттера является то, что оно не обеспечивает полного внедрения зависимостей.
Нет никакой гарантии относительно того, внедрена ли в определенный объект зависимость или нет. Другими словами, это означает, что может быть объект с неполной зависимостью. Внедрение сеттера — наиболее гибкий и распространенный способ реализации внедрения зависимостей.
Основные различия между внедрением конструктора и внедрением сеттера
- Когда внедрение конструктора используется для внедрения зависимости, это делается с помощью конструктора в любом bean-компоненте, управляемом Spring, тогда как внедрение Setter использует методы setter, такие как set dependency(), с целью внедрения зависимости в любой из bean-компонентов, управляемых контейнером IOC Spring.
- Внедрение установщика более читабельно по сравнению с внедрением конструктора, поскольку имя метода установщика всегда начинается с набора слов, например setXYZ(), и поэтому его легко читать в Spring. XML config и интерпретировать устанавливаемую зависимость, тогда как внедрение конструктора использует индекс для внедрения зависимости.
- Некоторые зависимости можно переопределить с помощью внедрения сеттера, тогда как это невозможно с помощью внедрения конструктора, поскольку каждый раз при вызове конструктора создается новый объект.
- Используя инъекцию установщика, значение можно легко изменить, так как он не создает новых экземпляров компонента, тогда как при использовании инъекции конструктора это не так, поскольку он всегда создает новый экземпляр компонента.
- Внедрение конструктора поддерживает неизменность, тогда как внедрение сеттера, с другой стороны, не поддерживает неизменность.
- 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
Последнее обновление: 19 июля 2023 г.
Пиюш Ядав последние 25 лет работал физиком в местном сообществе. Он физик, увлеченный тем, чтобы сделать науку более доступной для наших читателей. Он имеет степень бакалавра естественных наук и диплом о высшем образовании в области наук об окружающей среде. Подробнее о нем можно прочитать на его био страница.
Объяснения внедрения конструкторов и установщиков подчеркивают важность правильного управления объектными зависимостями для надежной и удобной в сопровождении разработки программного обеспечения.
Действительно, Vcox. Тщательное рассмотрение методов внедрения зависимостей необходимо для обеспечения долгосрочной жизнеспособности и удобства сопровождения программных систем.
Хорошо сформулировал, Vcox. Эффективное управление зависимостями является важнейшим аспектом разработки масштабируемых и поддерживаемых приложений.
Подробная информация о внедрении конструкторов и установщиков дает разработчикам четкое представление о том, как эффективно управлять зависимостями в приложениях платформы Spring.
Точно, Роджерс, Наташа. Понимание тонкостей методов внедрения зависимостей имеет решающее значение для поддержания чистоты и масштабируемости кодовых баз.
Удивительно, как инъекции конструкторов и установщиков предлагают различные уровни поддержки неизменяемости и циклических зависимостей, влияя на дизайн и поведение приложения.
Абсолютно, Кристиан13. Потенциал циклических зависимостей и неизменяемость объектов должны быть центральными факторами при выборе метода внедрения зависимостей.
Я не могу не согласиться, Christian13. Последствия этих различий для общей архитектуры системы существенны и должны быть тщательно рассмотрены.
В сравнительной таблице представлен краткий обзор плюсов и минусов внедрения конструктора и установщика, что упрощает принятие решения о том, какой из них использовать в разных контекстах.
Абсолютно, Аморрис. При выборе метода внедрения важно взвесить компромиссы между неизменностью, читабельностью и полнотой создания объекта.
Я ценю подробное сравнение. Это помогает разработчикам принимать обоснованные решения, исходя из конкретных требований приложения.
Углубленные объяснения внедрения конструкторов и установщиков дают ценную информацию о различиях и вариантах использования каждого подхода.
Хорошо сказано, Даррен. Понимание фундаментальных концепций и последствий методов внедрения зависимостей имеет решающее значение для разработчиков при создании надежных и удобных в обслуживании систем.
Подробные объяснения внедрения конструкторов и установщиков проливают свет на компромисс между полнотой создания объекта и гибкостью в управлении зависимостями.
Абсолютно, Eden60. Баланс между полнотой и гибкостью внедрения зависимостей имеет решающее значение для разработки масштабируемых и удобных в обслуживании программных приложений.
Красиво подытожено, Eden60. Понимание этих компромиссов необходимо для принятия обоснованных решений о проектировании и архитектуре программных систем.
Сравнение внедрения конструктора и установщика дает разработчикам четкое понимание влияния каждого метода на общий дизайн и поведение приложения.
Хорошо сказано, Беги. Понимание последствий различных методов внедрения зависимостей имеет решающее значение для разработки надежных и удобных в обслуживании программных решений.
Сравнение внедрения конструктора и установщика показывает, что оба подхода имеют явные преимущества и влияют на общий дизайн и поведение приложения.
Абсолютно, Крогерс. Для принятия обоснованных проектных решений важно оценить конкретные требования и последствия каждого метода впрыска.
Углубленные объяснения внедрения конструкторов и установщиков предоставляют разработчикам ценную информацию о том, как эффективно проектировать сложные зависимости и управлять ими.
Хорошо сказано, Арчи30. Глубокое понимание методов внедрения зависимостей имеет решающее значение для разработки надежных и легко поддерживаемых архитектур программного обеспечения.
Отличное объяснение! Оба метода внедрения зависимостей имеют свои преимущества и недостатки, которые необходимо тщательно учитывать в каждом проекте.
Согласен, Ава. Внедрение через конструктор — отличный выбор, когда необходимо обеспечить полное создание объекта со всеми зависимостями, тогда как внедрение через установщик более гибко, но не гарантирует полного внедрения зависимостей.
Спасибо за четкое объяснение. Важно оценить конкретные потребности проекта, чтобы определить наиболее подходящий метод внедрения зависимостей.