ZAWWW-2st1.2-w12.tresc-1.0-Slajd8
Inversion of Control / Dependency Injection
Podstawowym mechanizmem wykorzystywanym w architekturze Spring jest mechanizm wstrzykiwania zależności (ang. dependency injection), zwany także zasadą odwrócenia sterowania (ang. inversion of control). Można ją żartobliwie przedstawić w postaci tzw. "zasady Hollywood szukania talentów" – to nie Pani/Pan dzwoni do nas, to my zadzwonimy do Pani/Pana. W tradycyjnym podejściu aplikacja jest odpowiedzialna za powoływanie do życia nowych obiektów i łączenie obiektów. W przypadku architektury Spring odpowiedzialność za tworzenie i wiązanie (ang. wiring) obiektów spada na kontener IoC, który na podstawie konfiguracji w pliku XML tworzy, w miarę potrzeby, nowe obiekty i łączy je ze sobą oraz ustawia ich cechy. Dzięki temu logika sterująca aplikacji jest całkowicie zwolniona z konieczności tworzenia i wiązania obiektów. Mechanizm wstrzykiwania zależności może być zaimplementowany na trzy sposoby. (1) każdy obiekt może implementować specjalny interfejs wyszukiwania obiektów zależnych, kontener może wołać metody interfejsu na rzecz obiektów, jest to rozwiązanie mało elastyczne i wprowadzające dodatkowy interfejs, a zatem wiążące aplikację z API architektury, (2) każdy obiekt może prezentować swoje cechy na zewnątrz w postaci metod dostępu getter i setter, dla każdej własności kontener może wstrzykiwać zależności przez automatyczne wywoływanie metod setter, (3) kontener może wstrzykiwać zależności na etapie tworzenia obiektu za pomocą publicznego konstruktora. Architektura Spring stosuje zarówno wstrzykiwanie zależności przez metody setter, jak i przez konstruktor.