Почему для внедрения зависимости требуется другой язык? - PullRequest
5 голосов
/ 26 октября 2011

Мне удобно программировать на Java, но я новичок в Spring.Я читал о внедрении зависимостей / инверсии управления (и использовал его с Spring в течение последних нескольких месяцев), но я не могу понять необходимость отдельного языка (xml / spring) для его достижения.

Что плохого в создании синглтона в Java под названием DependencyHandler и сохранении всего на одном языке?Какие преимущества я получаю, используя xml / Spring?

Ответы [ 5 ]

7 голосов
/ 26 октября 2011

Внедрение зависимостей не требует отдельного языка.

Spring - это платформа для Java, которая исторически требовала конфигурации в xml. Теперь вы можете настроить его, используя xml или java-аннотации.

Google Guice - это простая структура внедрения зависимостей, которая имеет всю конфигурацию в Java.

3 голосов
/ 26 октября 2011

Могут быть законные причины, по которым пользовательский язык (в xml) может быть лучше, чем Java, для определенной цели.Однако для DI причины растянуты, а на самом деле не настоящие причины.

Из бесчисленных свидетельств счастливых пользователей Spring непреодолимой причиной является то, что они почему-то думают, что xml - это не код.Они так устали от написания шаблонного Java-кода, что с радостью переключаются на шаблонный xml.И это делает их счастливыми.

Люди не рациональны, когда дело доходит до экономических вопросов.У нас есть сложные системы, которые передают ресурсы по кругу, находя комфорт и безопасность в такой бессмысленной трате усилий.

Но я думаю, счастье - это самая важная вещь, какой бы отсталой она ни была.

2 голосов
/ 26 октября 2011

Вы также можете создавать структуры внедрения зависимостей, использующие синтаксис Java. Просто посмотрите на Google Guice , например.

0 голосов
/ 26 октября 2011

Я отвечу на часть «преимущества» для XML, хотя их не так много.

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

Проще (не смешно, но достаточно примечательно) создавать цепочки инструментов, которые влияют на файлы конфигурации: загрузка / замена свойств, редакторы конфигурации GUI с поддержкой конфигурации, генерация документации и т. Д.

Централизованная конфигурация;вместо конфига, разбросанного по базе кода, он находится в группе файлов (или в одном файле).Это не только XML-версия, это зависит от того, как все настроено.

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

0 голосов
/ 26 октября 2011

Spring - это простой способ управления внедрением зависимостей в больших проектах.

Но вы можете внедрить зависимости, используя статический метод фабрики для вашего класса:

public class Foo
{
    public Foo static mkFoo(/* dependencies */)
    {
        // assign dependencies to members
    }

    // ordinary class stuff
}

Тогда вы простоделать Foo.mkFoo(/*dependencies*/) всякий раз, когда вы хотите Foo.Не требуется пружина .

Что плохого в создании синглтона в Java под названием DependencyHandler и сохранении всего на одном языке?

Обработка всехВаши зависимости в одном классе быстро запутаются и приведут к соединению со всеми вашими другими классами.Но это не причина, чтобы не обрабатывать DI в простой Java.

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