JavaRush /Java блог /Архив info.javarush /Dependency Injection. Помогите чайнику!
BigVOVA
30 уровень

Dependency Injection. Помогите чайнику!

Статья из группы Архив info.javarush
Я уже вовсю юзаю Spring, где на каждый "пук" ложиться @autowired. Все отлично работает, удобно и просто до обалдения. Но в один прекрасный момент я понял, что я ничего не понял) Как это работает? Коллеги! Помогите разобраться... Dependency Injection. Помогите чайнику! - 1Интересует пример для чайников... Как без Spring проинжектить экземпляр одного класса в поле другого? Может ссылку простую дадите, или в комментах объясните.
Комментарии (21)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
k1per Уровень 19
26 января 2016
Через Reflection API. То есть Cat не через new будет созжаваться, а через newInstance()(и вообще не мы создаем бин), куда в качестве параметра будет передан подходящий Bean, опять же, созданный контекстом на основе XML-конфигурации Spring-a и аннотаций. То есть context нам делает необходимый Inject.

Так мне кажется, хе-хе, но я могу ошибаться. Если кто поправит, буду очень рад.

Ппц, как-то сложно написал. Вообщем, все реализовано через механизм рефлексии.
BigVOVA Уровень 30
26 января 2016
Коллеги! Или я неправильно написал, или Вы не дочитали. Как работает di, ioc в Spring в прикладной плоскости мне понятно. Я не могу догнать как реализует di сам Spring. Т.е. давайте представим, что Spring еще не придумали) Допустим у нас есть класс Cat и нужно проинжектить в него Animal, пусть на уровне конструктора используя аннотацию @MyAutowired. Может кто реализовать @MyAutowired так, чтобы на примере был понятен механизм?

public class Animal {
    
    private int tail = 1;
    private int feet = 4;

    public Animal() {
    }

    public int getTail() {
        return tail;
    }

    public int getFeet() {
        return feet;
    }
}


public class Cat {

    private Animal animal;

    @MyAutoWired
    public Cat(Animal animal) {
        this.animal = animal;
    }
}


public @interface MyAutoWired {
    //ToDo
}
k1per Уровень 19
26 января 2016
Всем привет. Сейчас читаю Spring in Action. Автор отлично объясняет зачем он создал Spring, как работает Dependency Injection и Aspect-Oriented Programming, а также остальные модули Spring-а
Качаем и читаем тут
Fry Уровень 41
25 января 2016
Наверное пора читать спеки. Есть много туториалов по спрингу на русском языке
Например:
Понимание контейнера инверсии контроля (IoC) Spring

А лучше тут читать

Ну или на худой конец Бориcова посмотреть
AndreGold Уровень 28
25 января 2016
поддерживаю, тоже не прочь чтобы обьяснили.