Внедрение зависимостей в каждом аспекте весеннего приложения? - PullRequest
3 голосов
/ 01 июня 2011

Я смотрю на Spring как на веб-фреймворк, но мне нужна помощь, чтобы разобраться с DI.

Концепция создания объектов в контейнере во время выполнения - это такая новая концепция.

Мне просто интересно, как это отразится в большом приложении, будут ли у меня какие-то модули, выполняющие работу с более высокой связью, или каждый объект должен быть инициализирован во время выполнения?

Мне все кажется немного интенсивным, я имею в виду, например, что у меня есть приложение для извлечения данных из файла CSV, которое удаляет данные в каждой строке - данные каждой строки инкапсулированы в один из моих CSVRow объектов для обработки или чего-либо еще , Эти объекты создаются всякий раз, когда файл Excel может быть загружен на сервер. Я не знаю, сколько мне нужно будет создать?

Кажется, я немного растерялся, любая ясность, обзор или некоторые рекомендации были бы очень благодарны.

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 02 июня 2011

Попробую попросту сказать:

  • использовать внедрение зависимостей для классов без состояний, которые имеют логику (бизнес-логика, логика персистентности, интерфейсная логика)
  • используйте new для объектов-значений
3 голосов
/ 02 июня 2011

Вообще говоря, приложение состоит из набора классов, которые реализуют бизнес-логику.
Обычно каждый объект отвечает за получение ссылок на нужные ему объекты (и зависимости этого объекта).
Я думаю,очевидно, что это приводит к:
1) тесно связанным классам
2) коду, трудно тестируемому, поскольку каждый объект создает конкретные классы, от которых он зависит, и если необходимо внести изменения, код должен быть изменен.
Таким образом, используя Dependency Injection, объекты сами не создают экземпляры зависимых объектов, а «внешний компонент» предоставляет зависимости во время создания объекта, т.е. внедряет зависимости в объекты.
Итак, в вашем примере идея заключается в том, что вынапример, может иметь объект CsvRow, созданный Spring (вместе со всеми его зависимостями), и получать объект при необходимости.Также возможно переключиться, например, на объект CsvRow2 (другая реализация), просто изменив конфигурацию

1 голос
/ 02 июня 2011

Я думаю о весне как о способе создания "синглетонов".Когда я хочу гарантировать, что в приложении есть только один экземпляр класса, используйте Spring для его создания.Но вместо того, чтобы быть традиционным синглтоном со статическим полем INSTANCE или подобным, это POJO с любыми необходимыми вам конструкторами / установщиками.Spring создает экземпляр во время выполнения для вас и гарантирует, что создание происходит только один раз.

1 голос
/ 02 июня 2011

Вам не нужно использовать DI для абстракции строки CSV.Как только вы получите файл, когда вы начнете его анализировать, ваш код может создавать вещи CSVRow по ходу дела.Вам не нужно их подключать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...