Spring Framework stanowi kluczowy komponent platformy Spring i dostarcza kompleksowy zestaw funkcjonalności, które
tworzą mocny fundament dla rozwoju nowoczesnych aplikacji Java. Zawarte w nim rozwiązania są dostępne „out of the
box”, co umożliwia deweloperom skupienie się na implementacji logiki biznesowej.
Dzięki Spring Framework, nie ma
potrzeby manualnego zajmowania się tworzeniem podstawowych obiektów, mapowaniem danych, walidacją czy konstruowaniem
systemów transakcyjnych. Framework oferuje bogaty zbiór narzędzi i funkcji, które ułatwiają i przyspieszają rozwój
aplikacji.
Jakie funkcjonalności oferuje Spring Framework?
Oto przegląd kluczowych rozwiązań i technologii (Core technologies):
-
Wstrzykiwanie zależności (DI)
Dependency Injection jest prawdopodobnie najbardziej
spektakularną funkcjonalnością jakiej doświadczamy stykając się po raz pierwszy ze Springiem.
Pozwala ona na przekazanie Springowi odpowiedzialności za tworzenie obiektów oraz dostarczanie ich do konkretnych miejsc w aplikacji.
Temat jest omawiany przez nas w rozdziałach:
Wstrzykiwanie zależności: DI & IoC
oraz
Wstrzykiwanie: Qualifier & Bean.
- Obsługa zdarzeń (Events)
W ramach cyklu życia komponentów występuje szereg zdarzeń, o których wystąpieniu możemy zostać automatycznie powiadomieni.
Co więcej, sami też możemy chcieć tworzyć własne (customowe) zdarzenia.
Do takich zadań przyda się z pewnością mechanizm powiadamiania lub nasłuchiwania (np. za pomocą adnotacji @EventListener).
- Zarządzanie zasobami (Resources)
Interfejs Resource wraz ze swoimi wbudowanymi implementacjami takimi jak
UrlResource, ClassPathResource, ByteArrayResource itp.
dostarcza nam możliwość określenia typu zasobu jakiego chcemy używać, a interfejs ResourceLoader umożliwia nam łatwe stworzenie obiektu na podstawie takiego zasobu.
- Lokalizacja językowa (i18n)
Internacjonalizacja i lokalizacja językowa w Springu pozwala na przechowywanie w osobnych plikach kluczy z wartościami (np. językowymi), które dodatkowo można jeszcze parametryzować.
Kluczowym interfejsem do realizacji takich zadań jest MessageResource, a jedną częściej używanych implementacji - ResourceBundleMessageSource.
- Walidacja (Validation)
Mechanizm oparty jest na interfejsie Validator i nadaje się do weryfikowania poprawności danych dostarczanych do beanów. Możemy w ten sposób tworzyć swoje implementacje walidacji
dla konkretnych typów obiektów. Ogranicza nas wyobraźnia oraz...wymagania biznesowe.
- Wiązanie danych (Data binding)
Niezwykle istotny mechanizm, który odpowiada za wiązanie danych przetwarzanych przez framework z konkretnymi polami w konretnych typach obiektów.
Na przykład gdy otrzymujemy dane w postaci żądania HTTP, to muszą one zostać zmapowane na odpowiednie pola w konkretnym obiekcie.
Taką operację nazywamy bindowaniem. Bindowanie danych w kontekście metod HTTP opisujemy na podstawie konkretnych adnotacji w rozdziale:
Spring MVC: Mapowanie requestów HTTP.
- Konwersja typów (Type conversion)
Czasem zwykłem bindowanie nie wystarca i potrzebujemy czegoś extra. Na przykład wtedy, gdy chcemy wykonać konwersję stringa do daty
w określonym formacie i strefie czasowej (z zewnętrznego systemu otrzymujemy stringi, a w bazie chcemy zapisywać daty w konkretnym formacie i strefie).
Wówczas przydatne staje się użycie interfejsu Converter oraz interfejsu ConverterFactory.
Możemy w ten sposób stworzyć własnego konwertera i podpiąć go do platformy, tak by był automatycznie uruchamiany gdy tego potrzebujemy.
- SpEL
Spring Expression Language jest językiem wyrażeń wspierającym framework Springa w kontekście dostępu do obiektów i parsowania danych, np. w ramach zapytań.
- AOP (Aspect Oriented Programming)
Programowanie zorientowane aspektowo ma wielorakie znaczenie. Można to przedstawić jako sposób na dostarczenie konkretnego algorytmu do wykonania w wielu
miejscach w kodzie projektu, poprzez zdefiniowanie go w jednym miejscu, wraz z określeniem miejsc w których ma się on wykonywać.
Pojawia się tutaj pojęcie takie jak Aspect, a razem z nim punkt złączenia (Join point) i punkt przecięcia (Pointcut). Aspekty opisujemy szerzej w rozdziałach:
Spring AOP - Podstawy
oraz
Spring AOP - AspectJ.
Rekomendacja
Warto poświęcić czas na zapoznanie się z każdym z wymienionych tematów. Szczególnie, jeśli jesteś
nowy w świecie Springa, zalecamy skoncentrowanie się na początku na wstrzykiwaniu zależności
(Dependency Injection, DI). Jest to kluczowy element frameworka, stanowiący fundament jego
działania.
Praktyka
Wstrzykiwanie zależności jest techniką, którą stosujemy we wszystkich naszych kursach.
Wykorzystujemy również obsługę zdarzeń, choć w ograniczonym zakresie, poprzez reagowanie na zdarzenie
ApplicationReadyEvent za pomocą adnotacji
@EventListener.
Dodatkowo, w ramach kursu
Kursu Aplikacji Web - Mega pakiet
implementujemy aspekty do monitorowania i logowania czasów wykonania metod odpowiedzialnych
za przetwarzanie logiki biznesowej.
Autor: Jarek Klimas
Data: 03 stycznia 2024
Labele: Backend, Podstawowy, Java
Czy informacje, które otrzymałeś, były pomocne?
Jeśli tak, zapraszam Cię do podarowania mi kawy.
[TEORIA i PRAKTYKA] Strefa doładowania wiedzy
W tej strefie znajdziesz wszystko co niezbędne, aby komfortowo uczyć się Springa.
Doskonale opisany kod nie zawiera zbędnych komplikacji, tylko samą esencję w postaci praktycznych przykładów.
Tutaj odnajdziesz wszystko co jest istotne w danym temacie. Otrzymujesz pakiet złożony z kilku projektów
wraz z obszernym wytłumaczeniem kodu.
Topowe Materiały
Spring IO: Spring Framework
Spring IO: Introduction to Spring Framework
Spring IO: Introduction to the Spring IoC Container and Beans
Spring IO: Spring Beans and dependency injection
Baeldung: Spring Framework Introduction
Baeldung: Intro to Inversion of Control
Baeldung: Spring Dependency Injection
Udemy: [NEW] Spring Boot 3, Spring 6 & Hibernate for Beginners — polskie napisy