Spring Boot i wstrzykiwanie zależności – szybkie wprowadzenie

Spring Boot – wstrzykiwanie zależności

Spring i Spring Boot

Spring to obecnie najpopularniejszy framework dla Java
– dlatego jeżeli myślisz poważnie o swoim rozwoju jako Java Developer, to zwyczajnie musisz zapoznać się przynajmniej z tym, co nam oferuje.

➡ ZOBACZ 👉: Spring oraz Spring Boot – Czym są? Oraz dlaczego MUSIMY je znać? 👻

Wstrzykiwanie Zależności

Wstrzykiwanie zależności (ang. Dependency Injection, w skrócie DI)
– to wzorzec projektowy, który umożliwia nam wstrzykiwanie obiektów do innych obiektów, zamiast tworzenia ich bezpośrednio.
W praktyce oznacza to większą elastyczność, modularyzację i łatwość w testowaniu naszego kodu.

Przy pierwszej styczności brzmi odrobinę dziwnie, ale w praktyce naprawdę ułatwia sprawę.

Standardowe podejście do tworzenia obiektów polega na tworzeniu ich za każdym razem przy pomocy operatora new.
Takie podejście sprawdza się w przypadku prostych sytuacji, jednak gdy poziom skomplikowania rośnie, to warto sięgnąć po inne, bardziej wyrafinowane rozwiązania.

Zobaczmy to na kilku prostych przykładach.

Ręczne tworzenie i zarządzanie zależnościami

Zobacz na poniższy kod:

public class ServiceStd {
	private final ServiceA serviceA;
	private final ServiceB serviceB;

	public ServiceStd() {
		this.serviceA = new ServiceA();
		this.serviceB = new ServiceB();
	}
}

Mamy tutaj klasyczny przykład ręcznego zarządzania zależnościami.
Nasz główny serwis ServiceStd, potrzebujemy 2 zewnętrznych zależności, do ServiceA oraz ServiceB.

W tym wypadku obiekty zewnętrznych zależności tworzymy w ramach naszego konstruktora.

  • A teraz wyobraź sobie, że do jednego z tych serwisów chcemy przekazać jakiś parametr lub nawet kilka.
  • A teraz, że chcemy zarządzać cyklem jego życia np. nie tworzyć go za każdym razem, a ponownie wykorzystać raz utworzony obiekt.
  • A teraz, że ten serwis jest wykorzystywany w wielu miejscach w naszym kodzie 🙂

Myślę, że już wiesz, o co mi chodzi.
To, co dobrze sprawdza się w przypadku prostych rozwiązań, w odrobinę większych projektach może już przyprawić o porządny ból głowy.

Całe szczęście mamy już gotowe wzorce i rozwiązania, które nam tutaj mogą pomóc.

Dlaczego właśnie Spring Boot?

Spring Boot to niezwykle popularny framework w świecie Javy.
Przyspiesza on proces tworzenia aplikacji poprzez wiele różnego rodzaju usprawnień, do najpopularniejszych należą:

  • oferowanie automatycznej konfiguracji, oraz
  • wsparcia dla wstrzykiwania zależności.

Jak działa wstrzykiwanie zależności w Spring Boot?

Spring korzysta z kontenera, który tworzy i zarządza cyklem życia obiektów (beanów).

Jednak, żeby to dobrze zrozumieć najlepiej będzie zacząć od wytłumaczenia czym jest IoC.

IoC – Inversion of Control

IoC – Inversion of Control – to kolejny wzorzec projektowy wprowadzający alternatywne  „odwrotne” sterowanie zależnościami, czyli właśnie odwrócenie sterowania.

  • Pracujemy nad własną logiką i tylko określamy, czego potrzebujemy np. przez interfejs – nie przejmujemy się szczegółami.
  • IoC polega na uzyskiwaniu dostępu do obiektów wcześniej już stworzonych.
    (zamiast własnoręcznego ich tworzenia i dopiero używania)
  • Potrzebujemy jednak kogoś/czegoś – co będzie tym zarządzać – kontenera IoC!
  • Inversion of Control (IoC) – proces definiowania zależności między obiektami bez ich bezpośredniego tworzenia. Ich tworzeniem zajmuje się już kontener.

Kontener Spring, Application Context

O kontenerze możemy myśleć jak o swego rodzaju półce na książki.
Zachowanie jest trochę podobne, do tego co znamy chociażby z puli stringów.

Zamiast tworzyć ręcznie obiekty (w tym wypadku beany) określamy, że chcemy, żeby Spring zrobił to za nas i tylko przekazujemy szczegóły jak taki obiekt ma się zachowywać.

Następnie możemy pobrać takie obiekty z naszej półki (kontenera) i wykorzystać w innym miejscu w kodzie.

Spring Bean

Jak w takim razie tworzymy obiekty w Springu?

Wystarczy dodać odpowiednią adnotację.

@Component
public class Silnik {
    public void start() {
        System.out.println("Silnik startuje!");
    }
}

W ten sposób oznaczamy naszą klasę jako Bean.

Następnie Spring podczas budowania kontekstu odszuka takie klasy i na ich podstawie utworzy nowe beany.

Wstrzykiwanie zależności

Gdy bean jest już gotowy, możemy go wykorzystać w naszym kodzie.

Za pomocą adnotacji takich jak @Autowired, możemy wskazać Springowi, że chcemy, aby dany obiekt (bean) został wstrzyknięty do innej klasy.

@Component
public class Samochod {
    private Silnik silnik;

    @Autowired
    public Samochod(Silnik silnik) {
        this.silnik = silnik;
    }

    public void jedz() {
        silnik.start();
        System.out.println("Samochód jedzie!");
    }
}



 

W powyższym przykładzie mamy klasę Samochod, która posiada zależność od klasy Silnik.

Dzięki adnotacji @Autowired, Spring Boot automatycznie wstrzykuje obiekt klasy Silnik do klasy Samochod podczas tworzenia jej instancji.

Najważniejsze zalety stosowania DI

Najważniejsze zalety stosowania DI

  • Zwiększona czytelność (ang. high readibility).
  • Luźne powiązanie komponentów (ang. low coupling).
  • Spójność rozwiązań (ang. high cohesion).
  • Ułatwione testowanie (ang. easiness of testing).
  • Lepszy projekt (ang. well designed).

Także samo dobro 🙂
Dlatego właśnie wstrzykiwanie zależności jest tak popularnym rozwiązaniem w naszych projektach.

Spring Boot – wstrzykiwanie zależności podsumowanie

Wstrzykiwanie zależności to potężne narzędzie w rękach programisty Java. Dzięki Spring Bootowi, proces ten staje się intuicyjny i prosty w implementacji.

Zapewnia to modularność, łatwość w testowaniu i oddzielenie logiki biznesowej od logiki tworzenia obiektów.
Jak w każdej technologii, ważne jest zrozumienie jej zasad działania i unikanie typowych pułapek.

Jako kolejny krok nauki Springa zachęcam do zainteresowania się naszym programem „Efektywne Aplikacje Internetowe” w ramach KierunekJava, gdzie ze szczegółami omawiamy Spring oraz Spring Boot.

>> Oferta Edukacyjna StormIT


20+ BONUSOWYCH materiałów z programowania

e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!

Jak zostać programistą

2 komentarze
Share:

2 Comments

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *