Привет, я новичок в String и читаю статью Мартина Фаулера: http://martinfowler.com/articles/injection.html
Он привел пример MovieLister, используя MovieFinder для поиска фильмов. В этом примере он сначала предоставил код:
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
}
Он отметил, что вы не можете дать MovieLister своему другу для повторного использования, если только ваш друг не использует ту же самую реализацию MovieFinder и не помещает фильмы в один и тот же файл txt.
Да, конечно, это НЕ так, как вы пишете компонент с надеждой, что кто-то сможет его повторно использовать. Вместо этого, по мере продвижения, вы должны написать:
class MovieLister...
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
Да, это лучше. Теперь ваш друг может взять ваш MovieLister и подключить его собственный код. Для меня история завершена. Я пропущу то, зачем вам нужна инфраструктура Spring для инъекции зависимостей. Зависимость вводится в MovieLister кодом вашего друга. Полная остановка. Вся установка Spring эквивалентна простому реализации интерфейса MovieFinder и делает такой вызов:
MovieFinder myMovieFinder = new MyMovieFinderImpl();
MovieLister myMovieLister = new MovieLister(myMovieFinder);
Просто, легко. Я знаю, что вы жестко кодируете создание экземпляра MyMovieFinderImpl в своем коде. Но какой смысл переместить это в XML, но принести столько других вещей? С тех пор, как программисты так боятся компиляции кода и предпочитают менять XML без компиляции, чтобы все было сделано? Мне очень жаль, но я думаю, что просто не понимаю смысла. Каждая программа использует инъекцию зависимости, несколько десятилетий назад. Но в старые времена зависимость вводится программами, использующими библиотеку или командную строку DOS, или графический интерфейс. Почему теперь нам нужен еще один способ инъекционной зависимости?
Спасибо.
Обновлено:
Ну, многие из вас, ребята, добавили аннотацию. В моем ясном понимании Spring я могу чувствовать себя более комфортно, используя XML, а не аннотацию. По крайней мере, есть центральное место, в котором указано, как зависимость, таким образом, что это легче понять. С аннотацией нет такого центрального места. Вместо этого происходит просто волшебство. Хотите знать, что передается в качестве параметра? Пойди сами себе и удачи. Да, я знаю, что смарт-плагины IDE помогают перемещаться по коду. Но почему мы делаем что-то сложное в первую очередь и отмечаем другое, что помогает сделать нашу жизнь проще? Правда, что аннотирование делает код более сложным для просмотра и понимания, поэтому люди создают плагины IDE для этого достаточно очевидно, что мы можем создавать ненужные вещи в первую очередь, не так ли?