Skip to content

Witaj w Świecie Jutra!

  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
  • Home
  • Wszystko
  • Czym jest Spring Boot (i Spring Web/Data/Security)
  • Programowanie
  • Wszystko

Czym jest Spring Boot (i Spring Web/Data/Security)

Jakub Raczkowski 1 maja 2024

Poprzednim odcinkiem rozpoczęliśmy temat Springa w programowaniu z użyciem Javy. Już wiemy, że esencją tego frameworka jest jego kontekst i adnotacje za pomocą których oddajemy mu kontrolę nad naszymi klasami. Dzisiaj przekonamy się co dostajemy w zamian.

Uwaga! W tej serii zajmuję się opisowym przedstawieniem tematu, a celem jest zapoznanie z zagadnieniem w sposób luźny i zrozumiały dla nowicjusza. W związku z tym wiele elementów siłą rzeczy musi zostać pominiętych. Tych z was, którzy chcieliby się dowiedzieć więcej, zapraszam do źródeł na końcu artykułu.

Uruchamiam stoper.

  • Wchodzę na uprzednio przygotowaną zakładkę ze stroną start.spring.io
  • Zaznaczam Mavena.
  • Klikam przycisk „Add dependencies” i błyskawicznie wybieram opcję „Spring Web„.
  • Wciskam kombinację klawiszy CTRL + Enter po czym rozpoczyna się pobieranie archiwum zip.
  • PPM -> 7-zip -> „wypakuj tutaj”
  • Otwieram nowo utworzony katalog, następnie dwuklik na pom.xml którego rozszerzenie zawczasu przezornie powiązałem z IntelliJ.
  • Inwestycja w dysk NvME opłaciła się – środowisko wstało niemalże natyczmiastowo.
  • Cholera, trzeba jeszcze dodać projekt to wyjątków w Windows Defenderze. Ten mały manewr będzie mnie sporo kosztował.
  • Jest! Projekt załadowany, SHIFT + F10… uruchomiony!
  • Wchodzę na http://localhost:8080… STOP!

58 sekund!

Mniej niż minuta. Tyle obecnie wystarczy aby wystawić swoją aplikację na świat. Co prawda, nic ona nie robi poza wywaleniem „404 Not Found”, a do tego działa tylko na maszynie lokalnej, ale to i tak nie w kij dmuchał!

@SpringBootApplication
public class ExampleApp {
public static void main(String[] args) {
SpringApplication.run(ExampleApp.class, args); }}

Dzięki Springowi potrzebujemy zaledwie 4 linijki kodu, aby dokonać czegoś na co w czystej Javie musielibyśmy poświęcić z godzinę* roboty.

(*) Oczywiście przesadzam, bo doświadczonemu programiście nie zajmie to więcej niż parę minut, ale wciąż pamiętam jak pierdzieliłem się z ustawianiem serwera i artefaktów próbując odpalić jeden z moich mniejszych projektów w przeglądarce. Tutaj takich trudności nie uświadczymy.

Masz rację, przepraszam i poprawiam:

Dzięki Spring Bootowi.

Największy problem w rozróżnieniu czystego Springa od Spring Boota polega na odnalezieniu tej cienkiej granicy, gdzie kończy się jeden, a zaczyna drugi.

Dla jasności – można używać samego Springa bez Boot’a, z tym że dojdzie nam wiele dodatkowej pracy z konfiguracją tzw. „bean’ów”, ustawianiem serwera i dociąganiem zależności. Natomiast Spring Boot zdejmuje z nas te obowiązki i jest doskonałym uzupełnieniem Springa.

To co widzimy podczas startu naszej aplikacji to właśnie Spring Boot. Gdyby nie on to musielibyśmy to wszystko sami ustawiać.

Spring Boot jest frameworkiem do frameworka Spring.

Przygoda ze Spring Bootem rozpoczyna się najczęściej właśnie na wcześniej przytoczonej stronie start.spring.io tudzież w IntelliJ’u przy tworzeniu nowego projektu z użyciem tzw. Spring Initializera:

Tam właśnie wybieramy komponenty Springa z których zamierzamy korzystać w naszym projekcie. A jest tego sporo – dla każdego coś fajnego, np.

  • Spring Web
  • Spring Data
  • Spring Security
  • Spring Integration
  • Spring Cloud

Do Spring Clouda nawiązałem już w tekście o mikroserwisach i na chwilę obecną nie ma się co nad nim więcej rozwlekać bo to zaawansowany temat i początkującemu jeszcze długo nie będzie potrzebny.

Jeśli zaś chodzi o pozostałe moduły, to teraz przejdziemy sobie po każdym z nich, pokrótce opisując który za co jest odpowiedzialny.

Utworzenie nowego projektu nigdy wcześniej nie było tak proste – wszystko można sobie wyklikać!

Spring Web

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Owszem, można nie wybierać żadnych zależności i dzięki temu otrzymać pojedynczy plik pom.xml, ale zazwyczaj mamy tam chociaż jeden komponent startowy i z reguły jest to właśnie Spring Web. Już samo wklejenie powyższego kodu do naszego „pom’a” sprawi, że aplikacja wystartuje i rozwali się jak basza na porcie 8080 naszej maszyny.

Od tego momentu tylko jedna klasa dzieli nas od stworzenia REST-owego kontrolera i wyświetlenia „Hello World!” w oknie naszej przeglądarki.

Tutaj się na chwilę zatrzymam,
gdyż chcę żebyś zrozumiał/-a
powagę tego co właśnie zrobiliśmy.

@RestController
public class HelloWorldController {
String htmlCode = "<html><body><h1>Hello, World!</h1></body></html>";
    @GetMapping
    public String hello(){
        return htmlCode;
    }
}

W ten prosty sposób, tworząc JEDNĄ klasę z JEDNĄ metodą, dotarliśmy do momentu w którym możemy z naszą aplikacją zrobić praktycznie WSZYSTKO.

Przeglądarka wyrenderuje dowolny kod html jaki tam wrzucimy, od krótkiego kawałka, aż po kompletną stronę WWW.

Pamiętajcie, że długość Stringa w Javie
jest limitowana tylko przez dostępny RAM
– to baaardzo dużo kodu html jaki możemy tam wrzucić!

Oczywiście pełnoprawnych aplikacji nie buduje się w ten sposób, a usługa REST standardowo zwraca obiekty serializowane do formatu JSON albo XML, ale i tak mam nadzieję, że widzisz jaki potencjał właśnie odblokowaliśmy zwyczajnie dodając do pom.xml zaledwie cztery linijki kodu!

W skład Spring Web wchodzi także moduł Spring MVC, który przydaje się w spinaniu frontu z backendem, ale tym zajmiemy się przy innej okazji.

Spring Data

Idziemy dalej i dodajemy zależność Spring Data JPA. Niestety sama jedna nic nie zdziała, gdyż odpowiada za komunikację z bazą danych – dlatego musimy jeszcze dociągnąć choćby jakąś prostą bazkę działającą w pamięci RAM i czyszczącą się z rekordów przy każdym restarcie aplikacji. Taka właśnie jest relacyjna baza H2 – na początek jak znalazł!

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>

Tutaj wchodzimy w tematy Hibernate’a o którym będzie kolejny odcinek serii, ale już teraz chciałbym wam pokazać jeden przełomowy „ficzer”, który ta kombinacja nam zapodaje.

Stoisz? To lepiej usiądź.
Siedzisz? To lepiej wstań i pa tutaj:

Wygląda jak zwykły interfejs, co nie?

Sęk w tym, że to jest NIEZWYKŁY interfejs. A dokładniej interfejs dostępu do bazy danych. Za pomocą słów kluczowych układamy sobie zapytania, które Spring tłumaczy na język SQL i dynamicznie – w czasie kompilacji – dobudowuje sobie klasę implementującą te metody. Dlatego taka deklaracja:

Optional<Test> findById(Integer id);

oznacza dokładnie to samo co:

SELECT * FROM Test WHERE test.id = id;

Nieźle!? Na początku też byłem zszokowany, jak prowadzący w tutorialu normalnie wybierał sobie dane z interfejsowych (czyli pozbawionych ciała) metod.

A to jedynie wierzchołek góry lodowej o nazwie Spring Data. Temat rozwiniemy już w następnym wpisie.

Spring Security

Dopisujemy kolejne linijki do pom.xml i patrzymy co się stanie:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

Okno logowania. Ot tak, po prostu. Jak gdyby nigdy nic. Bez ustawiania tabelek w HTML-u, bez stylowania CSS-ami, bez dodawania referencji do formularzy, bez implementacji metod REST-owych. Można by powiedzieć:

„ZA DARMO”

Spring Security odpowiada za zabezpieczenie naszej strony przed nieautoryzowanym dostępem. Możemy sami wybierać które endpointy wystawimy każdemu, a które będą dostępne tylko zalogowanym użytkownikom. Możemy ustawiać role takie jak ADMIN, MODERATOR, USER, a każda będzie miała inne przywileje. Możemy wybierać metody haszowania haseł, ich resetowania i przywracania. Możemy… mógłbym tak jeszcze długo, ale chyba już wiecie o co w tym chodzi.

Keycloak jest alternatywą dla własnoręcznie rzeźbionego Spring Security

Słówko: „Keylcloak” również od czasu do czasu może się pojawić w ofertach pracy, a odnosi się właśnie do zabezpieczeń i Spring Security. Często (szczególnie w prywatnych projektach i małych firmach) nie chcemy brać na siebie ciężaru utrzymywania bazy danych logowania użytkowników – bo RODO, bo konsekwencje jak coś wycieknie, bo nie mamy od tego specjalisty. Wtedy możemy oddelegować tę niewdzięczną robotę do zewnętrznych narzędzi takich właśnie jak Keycloak. Tam mamy pewność, że opcje bezpieczeństwa są przetestowane i zaimplementowane przez prawdziwych profesjonalistów, że o niczym nie zapomniano.

Keycloak umożliwia łatwe ustawianie wszystkich parametrów z poziomu swojego GUI, a także integrację z zewnętrznymi usługami przez co czasami widzimy takie okienko jak poniżej:

Spring Integration

Integracja w Springu odnosi się przede wszystkim do tzw. message brokerów czyli pośredników umożliwiających komunikację asynchroniczną, np. RabbitMQ czy Kafka. Będzie o tym osobny wpis już wkrótce.


Spring Boot: Podsumowanie

Mam nadzieję, że już widzicie jaki potencjał drzemie w Spring Boocie. Podejrzewam, że dzisiejszy wpis był najdłuższy ze wszystkich dotąd napisanych w tym cyklu, a i tak ledwo liznęliśmy temat.

Piękno omawianego rozwiązania tkwi w jego prostocie w myśl zasady:

Convention over Configuration

(Zwyczaj/norma ponad Konfigurację)

Chodzi o to aby jak najwięcej ustawień miało od razu wartości domyślne – takie jakie są najpopularniejsze w użyciu, by programista od razu mógł zacząć pracę bez uprzedniego błądzenia po dokumentacji próbując ustawić środowisko pod swój projekt. Ci, którym owe parametry nie pasują mają możliwość je szybko zmienić, ale cała reszta ucieszy się mogąc uruchomić swoją pierwszą appkę w mniej niż minutę tak jak to pokazałem na samym początku artykułu.

Blog Przemka Bykowskiego

Pod sam koniec chciałbym wam jeszcze polecić blog Przemka Bykowskiego, znanego w polskich kręgach IT specjalisty od Springa. Znajdziecie tam bardzo dużo informacji o programowaniu: w szczególności z użyciem Javy oraz Spring Boota.

Na dzisiaj tyle, widzimy się już za kilka dni we wpisie poświęconym Hibernate’owi.


Źródła:
Blog Przemka Bykowskiego blog/POL
Przemek Bykowski: SpringBoot – wprowadzenie YT/POL
Kurs Springa dla średnio-zaawansowanych na Udemy (płatne) POL
Książka „Spring w Akcji” Craig Walls

Tags: programming

Continue Reading

Previous: Czym jest Spring (i Java EE)?
Next: Czym jest Hibernate (i Liquibase)?

Related Stories

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025

Ze świata

  • Antyweb
  • Kwantowo
  • Dwóch po dwóch
Netflix idzie w zaparte. Mówi że wszystko jest dobrze, ale użytkownicy nie kryją rozczarowania
Flagowy smartfon od Samsunga tuż za rogiem. Czegoś takiego jeszcze nie było
Supernowe zmieniały klimat Ziemi. Dowody są zapisane w lodzie
Klienci T-Mobile wrzuceni pod koła. Hakerzy: mamy dane 64 mln osób
Internet i telefon na firmę - szybko i tanio
To kandydat do filmu roku. Te fakty trzeba znać
Bezpieczniej i wygodniej - co można zainstalować w domu?
Planety typu „gorący Jowisz” zaskakują. Powinny się rozpaść, a wciąż istnieją
Jak działają „stare” gry na Nintendo Switch 2? Jest kilka niespodzianek!
Teleskop Webba uchwycił rodzące się planety. Każda na innym etapie życia
Użytkownicy Spotify wystawieni na minę. Mogą stracić pieniądze
Niezwykła supermoc nietoperzy. Arcywróg ludzkości ich nie rusza
Tak wygląda implant zęba rodem z przyszłości. Chirurdzy i pacjenci się ucieszą
Może czas odstawić Chrome'a? Nowy zadwodnik może być królem przeglądarek
Ukradli złodziejowi samochód. Pomógł sprzęt od Apple
Europa ma dość Stanów. Poszukają innych partnerów. Są już kandydaci
Kolejny InPost na horyzoncie… ale do zadań, projektów i organizacji pracy?
Chiny nic sobie nie robią z restrykcji. Sprytnie obchodzą zakazy USA
Bank Pekao wydał ważny komunikat. Klienci mogą mieć spore problemy
Wyjeżdżasz za granicę? Oto najtańsze oferty na telefon i internet!
Ocalić od zapomnienia
Ostatni kwant
ALH 84001 – meteoryt, o którym mówiono nawet w Białym Domu
HESS zarejestrował kosmiczny elektron o niespotykanej energii [Phys. Rev. Lett.]
Matka ciemnej materii – recenzja biografii “Vera Rubin. Życie”
Satelita, który zerwał się ze smyczy
Wiadomość od Carla Sagana do przyszłych eksploratorów Marsa
Ile najdłużej może trwać zaćmienie Słońca?
Nowa największa liczba pierwsza ma ponad 41 milionów cyfr [GIMPS]
Pulsar 4U 1820-30 wykonuje 716 obrotów na sekundę [AJ]
Ostatni z nas. Zrozumieć The Last of Us – recenzja książki
Nasze podsumowanie Comic Con Baltics 2025
Mała wielka mysz. Glorious Model O 2 mini – recenzja
Tak było na Comic Con Baltics 2025 w Wilnie (Relacja)
O przedsprzedaży Pixel 9a w samochodzie – Odcinek #122
Obejrzeliśmy Ukryty Poziom na raz – No Movie Ci
Premiera Nintendo Switch 2, seriale, i piwniczne artefakty – Odcinek #121
Ludzieee, wy tego używacie? Recenzja klawiatury Trust GXT 867 Acira
Sympatyczny mały flagowiec. Samsung Galaxy S25 – recenzja
Recenzja pionowej myszy Natec Crake 2. Się wziął gruby i nawrócił

To może cię zainteresować:

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025
Czym jest Swagger?
  • Programowanie

Czym jest Swagger?

22 lipca 2024
  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
Copyright © All rights reserved. | DarkNews by AF themes.