Spring wstrzykiwanie zależności

0

Witam, czy ktoś może mi wytłumaczyć co daje wstrzykiwanie zależności z pliku XML?
Proszę o przykład jak to działa przy tworzeniu obiektów w programie a jak to działa kiedy Spring to robi :)
Jestem początkujący staram się to ogarnąć, z góry dziekuje :)

2

Wstrzykiwanie zależności to wzorzec projektowy. Spring jest frameworkiem, który właśnie implementuje taki wzorzecz projektowy.

Na początek weźmy przykład. Mamy taką klasę

public Class Pracownik{

private Zadanie zadanie;

public Pracownik(){
zadanie= new PosprzatajSamochod();
}

public void wykonajZadanie(){
zadanie.wykonaj();
}

}

Co jest z tym nie tak? Po pierwsze w naszej klasie tworzymy obiekt new PosprzatajSamochod() i tym ograniczamy naszego pracownika, że jest w stanie tylko sprzątać samochód. Zależy nam na tym aby nasz Pracownik był w stanie wykonać każde zadanie, które mu powierzymy. Jak to zrobić? Z pomocą przychodzi wstrzykiwanie zależności. Są różne rodzaje wstrzykiwania zależności. Weźmy wstrzykiwanie zależności przez konstruktor.

public Class Pracownik{

private Zadanie zadanie;

public Pracownik(Zadanie zadanie){
this.zadanie=zadanie
}

public void wykonajZadanie(){
zadanie.wykonaj();
}

}

Jak widzisz nie tworzymy silnego powiązania między klasami. Nasz kod nie jest silnie powiązany przez konstrukcje jak w pierwszym przykładzie. Zyskujemy na tym kilka rzeczy, po pierwsze nie ograniczamy swojego kodu, jak będzie coś trzeba zmienić to po prostu wstrzyknienie inny obiekt, który bęzie implementował interfejs Zadanie. Po drugie taki kod łatwiej się testuje.

Przeczytaj sobie książkę spring w akcji(spring in action) jest to dobrze omówinione w wydaniu III, nie wiem jak w IV.

Teraz podobno konfiguracja xml to przeżytek.

2

Samo wstrzykiwanie zależności jako wzorzec może polegać po prostu na podaniu klasie zależności np. przez konstruktor, dając interfejsy w argumencie. W springu te zależności podaje kontener (na podstawie konfiguracji), ale dodatkowo jeszcze (ten kontener) pozwala nakładać aspekty na metody i zarządzać cyklem życia komponentów, więc to takie 3 w 1. Jest to realizowane przez jakieś adnotacje, refleksje, proxy, invokedynamic i co tam jeszcze (chyba manipulowanie bajtkodem ale na tym to już się kompletnie nie znam).

0

Ponadto framework dba o cykl życia beanów. Poczytaj sobie tutaj o scopach dla beanów w Springu... Jaki jest domyślny scope? Jakie są jego zalety i wady?

1 użytkowników online, w tym zalogowanych: 0, gości: 1