Lipiec 26, 2019

5 powodów dlaczego powinieneś nauczyć się Spring Boota

Spring i Spring Boot

Jeśli programujesz już dłuższy czas w Javie i coraz częściej myślisz o podjęciu pracy jako programista w tym języku jestem pewien, że napotkałeś się na takie pojęcia jak Spring lub Spring Boot.

Z powyższymi terminami najprawdopodobniej spotkałeś się nie raz np. szukając odpowiedzi na pytanie jak zbudować aplikację webową w Javie lub przeglądając ogłoszenia o prace.

W obu przypadkach na 99,9% na pierwszym miejscu został wymieniony właśnie Spring lub Spring Boot – i właśnie m.in. z tego powodu chcę Ci o nich trochę opowiedzieć.

Czym jest Spring?

Spring jest aktualnie najpopularniejszym frameworkiem do budowania aplikacji Java Enterprise Edition.

Mówiąc o JEE mam na myśli platformę wraz z zestawem narzędzi do łatwiejszego budowania aplikacji biznesowych – głównie webowych.

O ile standard JEE nie zbyt spodobał się developerom, to Spring Framework wręcz przeciwnie. Już od 2002 roku mamy przyjemność pracować w tym środowisku. Po kilkunastu latach ciężko spotkać doświadczonego programiste, który nie zna omawianego frameworku.

Rod Johnson, twórca Springa stwierdził, że tworzenie aplikacji w JEE jest totalnie bez sensu i zdecydował się na stworzenie środowiska, które będzie robiło to lepiej.

Na początku Spring miał tylko zmienić podejście do tworzenia aplikacji, jednak na przestrzeni lat Spring wypuścił sporo modułów, są to m.in. Spring Cloud, Spring Security oraz Spring Data – chociaż jest tego jeszcze więcej co można znaleźć w dokumentacji Springa.

Zdjęcie ze strony https://docs.spring.io/spring/docs/current/spring-framework-reference/

Czym jest Spring Boot?

Po 12 latach istnienia Springa, twórcy wypuścili kolejny byt pod nazwą Spring Boot. Jednak za nim przejdziemy dalej, wróćmy do genezy.

Pomimo tego, że Spring od początku ułatwiał tworzenie aplikacji to niestety, tworzenie projektu od podstaw było uciążliwe – szczególnie dla nowych użytkowników.

Wszystko – wszystkie moduły i zależności musiały być dodawane i konfigurowane ręcznie.

Budując aplikację otrzymywaliśmy plik wynikowy war (Web Archive), który zawierał m.in zależności oraz servlety naszej aplikacji webowej. Plik war następnie musiał zostać wrzucony na serwer aplikacji internetowych (np. Tomcat, Glassfish) i dopiero po tym zabiegu mogliśmy cieszyć się działającą aplikacją. Tak naprawdę to nie zawsze – często plik war nie chciał się zbudować z powodu błędnej konfiguracji lub problem stał po stronie serwera aplikacji.

Krótko mówiąc, było to uciążliwe.

Twórcy wyszli na przeciw developerom i spod ich rąk wyszedł projekt pod nazwą Spring Boot. Narzędzie, które to za nas zaczęło konfigurować potrzebne moduły oraz ogarniać kwestię uruchomienia serwera aplikacji.

Budując aplikację Spring Bootową otrzymujemy plik JAR, który wystarczy uruchomić prostym poleceniem:

java --jar spring-boot-app.jar

Dodając nowe zależności Springa, Spring Boot potrafi wczytać domyślną konfigurację skanując classpath – w skrócie mówiąc, patrzy jakie klasy załadowaliśmy i dla nich ładuje odpowiednią konfigurację.

Spring Boot umożliwia wygenerowanie projektu w kilka minut i pozwala na natychmiastowe pisanie logiki biznesowej tworzonej aplikacji.

5 powodów dlaczego powinieneś poznać Springa

Przedstawię Ci teraz 5 powodów, które mam nadzieję zachęcą Cię do nauki tego potężnego narzędzia.

1. Szybkość budowania aplikacji

Tak jak wspomniałem wyżej, Spring Boot umożliwia wygenerowanie działającego projektu w kilka minut.

Po paru minutach mamy tak naprawdę działającą aplikację, którą możemy następnie opublikować np. na VPS.

Dodanie do projektu integracji z bazą danych, konfiguracja Spring MVC lub stworzenie restowego kontrolera to kolejne kilkanaście minut pracy.

Dzięki możliwościom Springa, ułatwieniom jakie niesie ze sobą Spring Boot oraz garstką wiedzy jesteśmy w stanie w jeden dzień stworzyć działającą aplikację, która potrafi już coś robić.

W dosyć krótkim czasie mamy możliwość zbudowania prostej aplikacji webowej, która potrafi np. persystować dane oraz zarządzać sesjami użytkownika.

I to wszystko tworząc kilka odpowiednich klas.

2. Popularność

Tego punktu nie zamierzam argumentować wykresami oraz pięknie dopasowanymi liczbami. Uargumentuję to własnym doświadczeniem.

Gdy jeszcze ponad rok temu szukałem swojej pierwszej pracy komercyjnej przeglądałem wiele portali z ogłoszeniami o pracę.

Przez okres około 3 miesięcy, natknąłem się na wiele ofert i pomimo aplikowania na stanowisko Junior Java Developera w ponad 50% ogłoszeń widywałem wymagania dotyczące podstaw Springa.

Gdy mając już ponad rok doświadczenia komercyjnego wyświetlają mi się nadal oferty pracy na stanowiska Java Developera i rzadko kiedy nie ma w nich Springa.

Nie ma co owijać w bawełne, Spring jest używany w większości firm do tworzenia aplikacji biznesowych, więc bardzo prawdopodobne, że również będą wymagać tego od Ciebie podczas aplikowania.

Jasne jest to, że w przypadku aplikacji na stanowisko juniora firma nie będzie wymagać od Ciebie nie wiadomo jakiej wiedzy o Springu, lecz powinieneś chociaż znać jego podstawy, aby wyglądać lepiej w oczach swojego potencjalnego pracodawcy.

Ja zanim rozpocząłem swoją pracę potrafiłem stworzyć prostą aplikację webową – wiedziałem jak działa Spring Container, jak skonfigurować MVC, potrafiłem zbudować kontroler oraz zapiąć Spring Security. Taka wiedza pozwoliła mi zbudować aplikację do swojego portfolio, którą mogłem się pochwalić w swoim CV.

Zanim przejdziesz do następnego punktu polecam Ci przejrzeć kilka ofert pracy na znanych portalach np.:

  • pracuj.pl;
  • justjoin.it;
  • bulldogjob;
  • linkedin.

Upewnij się, że firmy wymagają takich umiejetności.

3. Dobra dokumentacja

Jeśli porozmawiasz z jakimkolwiek doświadczonym programistą Javy na temat ekosystemu Springa to na pewno wspomni on o tym, że Spring posiada wzorową dokumentację.

Wiele osób twierdzi, że duża liczba firm i technologii powinno uczyć się od Springa jak powinna wyglądać dobra dokumentacja.

Prawda jest taka, że jeśli nie wiesz jak coś zrobić w Springu to na 99% jest to ładnie opisane w dokumentacji – krok po kroku autorzy prowadzą developerów za rękę pokazując jak zaimplementować rozwiązanie X.

Zachęcam do zerknięcia na przykładowe artykuły z dokumentacji:

Dla Ciebie prawdopodobnie najbardziej interesujące będą trzy ostatnie artykuły, gdzie krok po kroku autorzy pokazują jak użyć podstawowych możliwości Springa.

4. Inversion of Control

Moduł Spring Core zawiera tzw. kontener Springowy, który ogarnia kwestie związane z IOC (Inversion of Control).

Na początek wyjaśnię o czym w ogóle tutaj mówimy.

IOC jest ściśle związany ze wzorcem projektowym dependency Injection. W skrócie termin odwróconego sterowania polega na tym, że to pewien byt steruje zależnościami w naszej aplikacji. Wstrzykuje zależności za nas, nie musimy robić tego ręcznie.

No, ale do sedna.

Spring Framework umożliwia nam modularyzację aplikację, czyli w łatwy sposób możemy tworzyć zależności, wstrzykiwać je w prawie dowolne miejsce oraz profilować – czyli podmieniać zależności na podstawie obranego kontekstu.

Dzięki modularyzacji w bardzo łatwy sposób możemy zmieniać zależności zależnie od środowiska w jakim się znajdujemy.

Zmiana bazy danych w środowisku produkcyjnym? Nie ma problemu – nie musimy zmieniać kodu, wystarczy, że powiemy Springowi, aby dostarczył do naszej aplikacji zależność związaną z wybraną bazą danych.

5. Testowalność

Wróćmy jeszcze raz do twórcy Springa – Rod Johnson.

Na początku tworzenia Spring Framework autor stwierdził, że aplikacje biznesowe powinny być łatwo testowalne. Był to jeden z jego celów podczas implementacji narzędzia.

Dzięki wcześniej wspomnianemu konterowi IOC oraz możliwości wstrzykiwania odpowiednych zależności. zależnie od danego kontekstu – w naszym przypadku środowisku testowym – w bardzo łatwy sposób możemy przetestować nasz kod.

Przypuśćmy, że w projekcie tworzymy testy integracyjne czyli tzw. testy end-to-end. W tych testach musimy przetestować czy wszystkie moduły w naszej aplikacji potrafią się dogadać. W tej sytuacji m.in. musi sprawdzić czy nasza aplikacja potrafi rozmawiać z bazą danych.

W przypadku, gdy takie testy integracyjne są uruchamiane np. podczas CI/CD (Jenkins/Bamboo) raczej nie chcemy podpinać dodatkowo zewnętrznej bazy danych, w takim przypadku wystarczy nam podpiąć bazę danych in-memory np. HSQLDB i tą kwestię potrafi już za nas załatwić Spring.

Bonus

Jest jeszcze kilka argumentow za tym, aby używać Springa, jednak nie chciałem ich teraz przytaczać, ponieważ prawdopodobnie nie są dla Ciebie teraz zbyt istotne.

  • Spring Cloud – można nazwać go drugim frameworkiem, ułatwia tworzenie aplikacji z mikroserwisami;
  • Spring Reactor – programowanie reaktywne;
  • Spring Quartz – łatwiejsze używanie biblioteki Quartz do uruchamiania planowanych tasków;
  • Java 12 – możliwość tworzenia aplikacji w najnowszych wersjach Javy;
  • Elasticsearch – zbieranie logów aplikacji.

Podsumowanie

Mam nadzieję, że po przeczytaniu tego artykułu choć trochę przekonałem Cię do nauki Spring Framework.