Если я могу решить внедрение зависимостей, используя обычные конструкторы или методы установки, каково использование инфраструктуры внедрения зависимостей, такой как spring, которая разработана исключительно для целей внедрения зависимостей?
Мой вам совет. Прежде чем начинать внедрение зависимостей, сначала прочтите о слабой связи.
Потому что вам не нужно заботиться о зависимости от класса к классу. Все это выполняется Spring с использованием IoC-контейнера, который содержит все bean-компоненты (классы java, аннотированные @Component, @Service, ...). Эти bean-компоненты по умолчанию имеют одноэлементную область видимости.
Это позволяет вам
@Autowire
private MyBean bean
пусть Spring вводит один (синглтон) экземпляр MyBean. С помощью @ Autowire-Annotation вы говорите Spring внедрить экземпляр MyBean. И это просто работает. Не нужно беспокоиться о том, как передать этот экземпляр MyBean каким-либо классам - они будут внедрены автоматически.
Альтернативой полевой инъекции является инъекция на основе конструктора, скажем, я использую инъекцию конструктора .. зачем тогда мне нужна весна?
Поскольку вам не нужно передавать свой экземпляр этому классу - Spring сделает это за вас, используя контейнер IoC.
@darshankamat Ну, потому что тогда вы жестко кодируете свои зависимости?
@Jagger, не могли бы вы также жестко закодировать свои зависимости, если бы вы использовали Autowiring в конструкторе? Разве это не тот же эффект? Если вы используете автоматическое подключение в конструкторе или просто обрабатываете его, вы всегда зависите от одних и тех же классов / экземпляров.
@watchme Нет, если я автоматически подключаю интерфейсы, а не классы. В этом весь смысл контейнера IoC, не так ли?
С интерфейсами вы выполняете слабую связь, это верно. IoC в Spring, как я понял, просто означает, что вы передаете фреймворку контроль над внедрением экземпляров класса. Если вы автоматически подключаете интерфейс или класс, не имеет значения. Просто IoC часто сочетается со слабой связью, но на самом деле это разные концепции.
Если у меня что-то не так, не стесняйтесь поправлять меня, я все еще нахожусь в начале изучения Spring.
@Jagger #morelettersinordertocomment
Возможный дубликат Что такое внедрение зависимостей?