Зачем Spring, если DI можно решить и с помощью конструктора?

Если я могу решить внедрение зависимостей, используя обычные конструкторы или методы установки, каково использование инфраструктуры внедрения зависимостей, такой как spring, которая разработана исключительно для целей внедрения зависимостей?

Возможный дубликат Что такое внедрение зависимостей?

Karol Dowbecki 18.03.2018 13:15

Мой вам совет. Прежде чем начинать внедрение зависимостей, сначала прочтите о слабой связи.

Jagger 18.03.2018 13:21
1
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что вам не нужно заботиться о зависимости от класса к классу. Все это выполняется Spring с использованием IoC-контейнера, который содержит все bean-компоненты (классы java, аннотированные @Component, @Service, ...). Эти bean-компоненты по умолчанию имеют одноэлементную область видимости.

Это позволяет вам

@Autowire
private MyBean bean

пусть Spring вводит один (синглтон) экземпляр MyBean. С помощью @ Autowire-Annotation вы говорите Spring внедрить экземпляр MyBean. И это просто работает. Не нужно беспокоиться о том, как передать этот экземпляр MyBean каким-либо классам - они будут внедрены автоматически.

Альтернативой полевой инъекции является инъекция на основе конструктора, скажем, я использую инъекцию конструктора .. зачем тогда мне нужна весна?

darshan kamat 18.03.2018 13:20

Поскольку вам не нужно передавать свой экземпляр этому классу - Spring сделает это за вас, используя контейнер IoC.

watchme 18.03.2018 13:21

@darshankamat Ну, потому что тогда вы жестко кодируете свои зависимости?

Jagger 18.03.2018 13:22

@Jagger, не могли бы вы также жестко закодировать свои зависимости, если бы вы использовали Autowiring в конструкторе? Разве это не тот же эффект? Если вы используете автоматическое подключение в конструкторе или просто обрабатываете его, вы всегда зависите от одних и тех же классов / экземпляров.

watchme 18.03.2018 13:53

@watchme Нет, если я автоматически подключаю интерфейсы, а не классы. В этом весь смысл контейнера IoC, не так ли?

Jagger 18.03.2018 14:20

С интерфейсами вы выполняете слабую связь, это верно. IoC в Spring, как я понял, просто означает, что вы передаете фреймворку контроль над внедрением экземпляров класса. Если вы автоматически подключаете интерфейс или класс, не имеет значения. Просто IoC часто сочетается со слабой связью, но на самом деле это разные концепции.

watchme 18.03.2018 14:41

Если у меня что-то не так, не стесняйтесь поправлять меня, я все еще нахожусь в начале изучения Spring.

watchme 18.03.2018 14:49

@Jagger #morelettersinordertocomment

watchme 18.03.2018 17:04

Другие вопросы по теме