Moduł 1: Wprowadzenie

Spring framework

Spring to aktualnie najbardziej popularny framework w ekosystemie Javy. Powstał w 2003 roku jako odpowiedź na wczesne wersje specyfikacji Java EE. Od samego początku promował najlepsze praktyki, prowadzące do testowalnego i jakościowego kodu. Dziś to dojrzałe i dopracowane rozwiązanie, oferujące kompleksowy model wytwarzania aplikacji dowolnego typu. Ponadto zapewnia łatwą integrację z najbardziej popularnymi technologiami.

Filozofia i założenia Spring

00:38

Ucząc się nowego frameworka, warto poznać nie tylko jego możliwości, ale także architekturę, sposób działania i najważniejsze założenia. Od początku istnienia Spring stawiał na wysoką jakość kodu przez promowanie wstrzykiwania zależności, programowania aspektowego, wykorzystania interfejsów czy stosowanie wzorców projektowych. Takie podejście prowadzi nie tylko do czystego i testowalnego kodu, ale także ułatwia jego utrzymanie w dłuższej perspektywie czasowej. API oferowane przez Spring jest dobrze zaprojektowane i bardzo intuicyjne. Jego twórcy starają się zachować maksymalną kompatybilność wsteczną, przy jednoczesnym wprowadzaniu nowości z kolejnych wersji Javy.

Spring features

01:18

Spring to wszechstronne i bardzo rozbudowane rozwiązanie. Obejmuje między innymi kontener realizujący wstrzykiwanie zależności, mechanizmy umożliwiające programowanie aspektowe, moduły pozwalające na dostęp do różnego rodzaju baz danych, tworzenie aplikacji webowych, usług restowych czy integrację z zewnętrznymi rozwiązaniami. Dzięki temu, że Spring jest modułowy, budując aplikację, możemy wybrać te elementy frameworka, które są nam naprawdę potrzebne. W czasie kursu poznamy najważniejsze z nich i nauczymy się z nich korzystać.

Dobre praktyki promowane przez Spring framework

01:50

Używając Spring framework, z założenia tworzymy bardziej jakościowy kod. Dzięki programowaniu z użyciem interfejsów oraz wstrzykiwaniu zależności uzyskujemy niskie sprzężenie między komponentami aplikacji. To z kolei przekłada się na możliwość łatwej wymiany implementacji oraz bezproblemowe tworzenie testów jednostkowych. Programowanie aspektowe umożliwia odseparowanie logiki biznesowej od logiki pobocznej dotyczącej np. logowania, transakcji czy bezpieczeństwa. W rezultacie kod biznesowy jest spójny i zgodny z zasadą pojedynczej odpowiedzialności. Korzystając z API Springa, często dostrzeżemy także popularne wzorce projektowe.

Interfejs

02:28

Interfejs to sposób na zdefiniowanie kontraktu między współpracującymi komponentami. Jest on na tyle istotny, że wiele języków, w tym Java definiuje go jako natywny element. Metody na poziomie interfejsu określają możliwe sposoby interakcji, innymi słowy stanowią publiczne API danego typu. Dzięki wykorzystaniu interfejsów możemy odizolować współpracujące komponenty, a to zapewnia niezależność od konkretnej implementacji i ułatwia jej wymianę.

Wstrzykiwanie zależności jako forma inwersji kontroli

02:55

Bezpośrednie wykorzystanie operatora new do tworzenia zależności komponentów może prowadzić do silnych sprzężeń, a w konsekwencji do kodu trudnego w utrzymaniu i testowaniu. Możemy rozwiązać ten problem, tworząc i konfigurując je na zewnątrz, a następnie podając przez konstruktor lub metody. Zmniejsza to występujące sprzężenie, a także prowadzi do lepszego podziału odpowiedzialności. Aplikacje oparte o Spring framework wykorzystują kontener IoC jako implementację tego mechanizmu. Kontener odpowiada za tworzenie, konfigurowanie i zarządzanie cyklem życia komponentów (beans).

Wzorzec projektowy

03:30

Koncepcja wzorców projektowych pochodzi od architekta o imieniu Christopher Alexander, który zaproponował wykorzystanie języka wzorców w klasycznej architekturze. Wzorzec to szablon sprawdzonego, a zarazem najlepszego rozwiązania, określonego problemu. Te związane z programowaniem obiektowym zostały opisane w „Design Patterns Elements of Reusable Object-Oriented Software” przez Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides tzw. bandę czworga (GOF). Na poziomie Springa możemy spotkać wiele z nich między innymi:

  • Singleton i Prototype – reprezentujące zasięgi komponentów
  • Proxy – jako sposób realizacji programowania aspektowego
  • Observer – wykorzystywany np. przy rozgłaszaniu / nasłuchiwaniu zdarzeń kontenera
  • Adapter – stosowany, aby umożliwić korzystanie z niekompatybilnych implementacji np. menadżera transakcji
  • Builder – używany w celu ułatwienia konfiguracji np. Spring MVC lub Spring Security
  • Command – spotykany np. w implementacji szablonów JDBC lub JMS

Wzorzec proxy

04:09

Umożliwia utworzenie obiektu zastępczego lub pośredniego dla innego obiektu. Pozwala kontrolować dostęp do oryginalnego obiektu oraz opakowywać wołaną metodę dodatkową logiką.

Programowanie aspektowe

04:23

Paradygmat pozwalający odseparować logikę biznesową od funkcjonalności pobocznych tzw. cross-cutting concerns. Logika poboczna np. związana z logowaniem zamykana jest w ramach specjalnych klas nazywanych aspektami, a następnie deklaratywnie aplikowana na poziomie wybranych metod komponentów (bez konieczności modyfikowania kodu źródłowego). Najczęściej realizacja tego mechanizmu oparta jest o wzorzec projektowy Proxy. Programowanie aspektowe przekłada się na lepszą czytelności i spójność kodu, a także zmniejsza koszty jego utrzymania i modyfikacji.

Materiały uzupełniające

Zaloguj się
Rejestracja jest darmowa!

Administratorem danych jest Sages Sp. z o.o. z siedzibą w Warszawie przy ul. Nowogrodzkiej 62c. Podanie danych jest dobrowolne. Osobie, której dane dotyczą przysługuje prawo wglądu do danych osobowych, ich zmiany oraz usunięcia w sposób określony w Polityce prywatności.

Please accept the Terms and Conditions to proceed.