#java #spring #dependency-injection #inversion-of-control
#java #spring #внедрение зависимостей #инверсия контроля
Вопрос:
Мне удобно программировать на Java, но я довольно новичок в Spring. Я читал о внедрении зависимостей / инверсии управления (и использовании его с Spring в течение последних нескольких месяцев), но я не могу понять необходимость отдельного языка (xml / spring) для его выполнения.
Что плохого в создании синглтона в Java под названием DependencyHandler и сохранении всего на одном языке? Какие преимущества я получаю, используя xml / Spring?
Комментарии:
1. Внедрение зависимостей связано с тем, как разработано ваше приложение. Это может быть реализовано многими способами, я не очень много знаю о spring, но я полагаю, что использование XML — это способ, которым spring реализует внедрение зависимостей
Ответ №1:
Внедрение зависимостей не требует отдельного языка.
Spring — это фреймворк для Java, который исторически требовал настройки в xml. Теперь вы можете настроить его, используя аннотации xml или java.
Guice от Google — это простая платформа внедрения зависимостей, которая имеет всю конфигурацию на Java.
Ответ №2:
Могут быть законные причины, по которым пользовательский язык (в формате xml) может быть лучше Java для определенной цели. Однако для DI причины растяжимы и, по сути, не являются реальными причинами.
Судя по бесчисленным свидетельствам пользователей happy Spring, основная причина заключается в том, что они почему-то думают, что xml — это не код. Они так устали писать шаблонный Java-код, что с радостью переключаются на шаблонный xml. И это делает их счастливыми.
Люди не рациональны, когда дело доходит до экономических вопросов. У нас есть сложные системы, которые передают ресурсы по кругу, находя комфорт и безопасность в такой бессмысленной трате усилий.
Но я думаю, что счастье — это самое главное, каким бы отсталым оно ни было.
Комментарии:
1. Я проголосовал за второй абзац, потому что я тоже так чувствую.
Ответ №3:
Вы также можете создавать фреймворки внедрения зависимостей, которые используют синтаксис Java. Просто посмотрите на Google Guice, например.
Ответ №4:
Я отвечу на часть «преимущества» конкретно для XML, хотя их не так много.
Наличие конфигурации, полностью отделенной от кода, удаляет все артефакты фреймворка из исходного кода, что может быть полезно.
Проще (не смешно, но достаточно, чтобы заслуживать внимания) создавать цепочки инструментов, которые влияют на файлы конфигурации: загрузка / замена свойств, редакторы конфигурации GUI с поддержкой конфигурации, генерация документации и т. Д.
Централизованная конфигурация; вместо конфигурации, разбросанной по кодовой базе, она находится в группе файлов (или в одном файле). Это не vitrue только для XML, это зависит от того, как все настроено.
Я думаю, что некоторые типы конфигурации больше подходят для внешней настройки, чем другие. Я выбираю на основе того, что кажется подходящим, учитывая требования, что позволяет фреймворк и как фреймворк обрабатывает аспекты конфигурации.
Ответ №5:
Spring — это просто простой способ управлять внедрением зависимостей в большие проекты.
Но вы можете вводить зависимости, используя статический фабричный метод в вашем классе:
public class Foo
{
public Foo static mkFoo(/* dependencies */)
{
// assign dependencies to members
}
// ordinary class stuff
}
Тогда вы просто делаете Foo.mkFoo(/*dependencies*/)
всякий раз, когда хотите Foo
. Пружина не требуется.
Что плохого в создании синглтона в Java под названием DependencyHandler и сохранении всего на одном языке?
Обработка всех ваших зависимостей в одном классе быстро усложнится и приведет к связыванию со всеми вашими другими классами. Но это не причина не обрабатывать DI в простой java.