Fiszki Online Spring (Preview)
Darmowy podgląd 15 z 56 dostępnych pytań
Podstawy Spring Framework
Czym jest Spring Framework i jakie były główne motywacje do jego powstania?
Spring Framework to platforma ułatwiająca tworzenie aplikacji w języku Java. Został stworzony w celu ujednolicenia rozwiązań związanych z konfiguracją, zarządzaniem zależnościami i tworzeniem modułowych komponentów oprogramowania. Wcześniej programiści korzystali z ciężkich kontenerów Java EE (np. EJB), co było wysoce skomplikowane i wymuszało pisanie dużej ilości kodu konfiguracyjnego. Głównymi motywacjami do powstania Springa były:
- Upraszczanie struktury aplikacji,
- Zapewnianie lekkiego kontenera IoC,
- Zwiększanie elastyczności poprzez modularną architekturę,
- Rezygnacja z nadmiernej konfiguracji (ang. “boilerplate” code).
Proponowane materiały:
↑ Powrót na góręWyjaśnij pojęcie Inversion of Control (IoC).
Inversion of Control (tzw. odwrócenie sterowania) polega na przeniesieniu odpowiedzialności za tworzenie i zarządzanie obiektami z kodu aplikacji do zewnętrznego kontenera (np. Spring IoC Container). Zamiast wywoływać konstruktory lub metody tworzące obiekty bezpośrednio, pozwalamy kontenerowi dostarczyć nam gotowe instancje (tzw. beany). IoC wspiera luźne powiązania między komponentami, co ułatwia testowanie oraz utrzymanie kodu.
Proponowane materiały:
↑ Powrót na góręJakie są różne sposoby definiowania beanów w Springu (np. XML, adnotacje, JavaConfig)?
- XML – tradycyjny sposób konfiguracji poprzez pliki XML, w których definiuje się beany oraz zależności.
- Adnotacje (np.
@Component,@Autowired,@Bean) – dzięki nim możemy automatycznie wykrywać klasy, które mają być zarządzane przez Spring (component scanning), a także deklarować metody tworzące beany w klasach konfiguracyjnych. - JavaConfig – pozwala na definiowanie konfiguracji w kodzie Java za pomocą adnotacji
@Configurationi@Bean. Ułatwia to utrzymanie konfiguracji oraz wykorzystanie mechanizmów statycznej analizy kodu.
Proponowane materiały:
- Spring – bean configuration in XML vs. JavaConfig (Baeldung)
- Helion – Książka “Spring w Akcji” (polska wersja)
Spring Beans i Konfiguracja
Czym jest bean w Springu i jak jest zarządzany przez kontener?
Bean w Springu to obiekt zarządzany przez kontener Inversion of Control (IoC). Kontener odpowiada za tworzenie, konfigurację oraz usuwanie beanów w trakcie działania aplikacji, zgodnie z określonymi regułami (np. przez adnotacje czy pliki konfiguracyjne). Dzięki temu deweloper nie musi samodzielnie tworzyć instancji obiektów – kontener zapewnia gotowe obiekty w odpowiednich miejscach i momentach.
Przydatne materiały:
↑ Powrót na góręJak działają zakresy beanów (scope), np. singleton, prototype, session, request?
W Springu scope określa okres życia beana oraz sposób dostarczania go do innych komponentów. Najpopularniejsze zakresy to:
- singleton – jedna instancja beana na cały kontener Spring.
- prototype – nowa instancja beana jest tworzona za każdym razem podczas wstrzykiwania.
- request – jedna instancja beana na pojedyncze żądanie HTTP (głównie w aplikacjach webowych).
- session – jedna instancja beana na sesję użytkownika (również w aplikacjach webowych).
Zakres ustawia się np. przez adnotacje (@Scope("singleton")), a w przypadku aplikacji webowych – przy użyciu specjalnych konfiguracji lub adnotacji na klasach/beanach.
Przydatne materiały:
↑ Powrót na góręJak działa mechanizm autowire’owania beanów?
Autowire’owanie (wstrzykiwanie zależności) polega na automatycznym wiązaniu obiektów w oparciu o typ lub nazwę. Najczęściej wykorzystuje się adnotacje:
@Autowired– na polu, konstruktorze lub setterze, aby wskazać bean do wstrzyknięcia na podstawie typu.@Qualifier– gdy jest wiele kandydatów do wstrzyknięcia tego samego typu, można wskazać konkretną nazwę beana.@Injecti@Named– alternatywne adnotacje z JSR-330 (z pakietujavax.inject).
Spring skanuje pakiety w poszukiwaniu klas oznaczonych adnotacjami takimi jak @Component, @Service czy @Repository (lub innymi konfiguracjami) i na ich podstawie tworzy bean, który następnie może zostać wstrzyknięty do innych komponentów.
Przydatne materiały:
↑ Powrót na góręSpring Boot
Czym jest Spring Boot i w czym pomaga w porównaniu do tradycyjnego Springa?
Spring Boot to rozszerzenie ekosystemu Spring, które upraszcza tworzenie aplikacji opartych na Springu. Zamiast konfigurować wszystko ręcznie (pliki XML, rozbudowane definicje beanów), Spring Boot wykorzystuje konwencję ponad konfiguracją (ang. convention over configuration) i automatyczną konfigurację (auto-configuration). Dzięki temu programista nie musi wchodzić w tak dużą liczbę szczegółów związanych z ustawieniami frameworka.
- Główne zalety Spring Boot:
- Szybsze uruchamianie projektu (wystarczy kilka zależności w pliku konfiguracyjnym Maven/Gradle).
- Wbudowane serwery aplikacyjne (Tomcat, Jetty, Undertow).
- Zintegrowane narzędzia do monitorowania i zarządzania aplikacją (Spring Boot Actuator).
Materiały:
↑ Powrót na góręCo to są i jak działają “startery” w Spring Boot?
“Startery” w Spring Boot to paczki (zależności Maven/Gradle), które dostarczają wstępnie przygotowany zestaw bibliotek i ustawień konfiguracyjnych dla specyficznej funkcjonalności (np. spring-boot-starter-web zawiera Spring MVC, Tomcata jako domyślny serwer, itd.). Ideą “starterów” jest skrócenie czasu pracy dewelopera, który nie musi już wyszukiwać każdej biblioteki osobno oraz ustawiać jej ręcznie – wystarczy wskazać odpowiedni “starter”.
- Jak działają?
Spring Boot sprawdza, które “startery” są obecne w zależnościach, i na tej podstawie konfiguruje pakiety w aplikacji (np. aktywuje zarządzanie transakcjami przy obecności
spring-boot-starter-data-jpa).
Materiały:
↑ Powrót na góręJak monitorować aplikację Spring Boot (Actuator, Health Checks)?
Spring Boot Actuator to wbudowany moduł w Spring Boot, który zapewnia zestaw endpointów do zarządzania i monitorowania aplikacji w trakcie działania. Pozwala on m.in. na:
- Sprawdzanie stanu aplikacji (ang. health checks).
- Wyświetlanie informacji o środowisku, zależnościach czy konfiguracji.
- Przegląd statystyk związanych z użyciem pamięci, liczbą aktywnych wątków itp.
W pliku konfiguracyjnym (application.properties lub application.yml) można ustawić, które endpointy mają być dostępne oraz określić poziom ich zabezpieczenia.
Przykład w application.yml:
management:
endpoints:
web:
exposure:
include: health,info
Po uruchomieniu aplikacji można uzyskać dostęp m.in. do:
http://localhost:8080/actuator/health– stan aplikacji.http://localhost:8080/actuator/info– informacje o wersji i innych właściwościach.
Materiały:
↑ Powrót na góręSpring MVC i Spring Web
Jak działa warstwa MVC w Springu?
Warstwa MVC (Model-View-Controller) w Springu opiera się na trzech głównych komponentach:
- Model – reprezentuje dane biznesowe oraz logikę aplikacji.
- View – odpowiedzialny za prezentację danych w postaci interfejsu użytkownika (UI), np. stron HTML.
- Controller – kontroler zarządza przepływem danych między warstwą modelu a widokiem; przyjmuje żądania i zwraca odpowiedź w postaci odpowiedniego widoku lub danych.
Dzięki temu podejściu kod aplikacji jest uporządkowany: komponenty są odpowiedzialne za osobne obszary działania, co ułatwia utrzymanie i rozwój projektu.
Materiały:
↑ Powrót na góręDo czego służy adnotacja @Controller i jak się ma do @RestController?
@Controller– oznacza klasę, która pełni rolę kontrolera w architekturze MVC. Metody w takiej klasie zwracają zwykle nazwę widoku (np. nazwę pliku HTML), a dane są przekazywane do warstwy widoku.@RestController– łączy w sobie@Controlleroraz@ResponseBody. Oznacza klasę kontrolera, w której metody zwracają dane (np. JSON lub XML) bezpośrednio do klienta, co przydaje się w tworzeniu usług REST.
Różnica polega na domyślnym sposobie przetwarzania danych zwracanych przez metody: @Controller domyślnie szuka widoków, natomiast @RestController zwraca obiekty, które Spring automatycznie serializuje do formatu JSON lub XML.
Materiały:
- Oficjalna dokumentacja Spring: @RestController (EN)
- Artykuł po polsku na DZone (tłumaczenie automatyczne może być potrzebne)
Jak obsłużyć walidację danych wejściowych w Spring MVC?
- Dodaj odpowiednie adnotacje walidujące z pakietu
javax.validation.constraints(np.@NotNull,@Size,@Email) w modelu (DTO lub enkapsulującej klasie danych). - Oznacz parametry metody kontrolera adnotacją
@Validlub@Validated. - Jeśli walidacja zostanie naruszona, Spring przerwie przetwarzanie i zgłosi błąd (np. w postaci obiektu
BindingResult). - Można wyświetlić błędy w widoku (jeżeli używamy HTML) lub zwrócić informacje w formacie JSON (jeżeli tworzymy API REST).
Materiały:
↑ Powrót na góręSpring Data
Czym jest Spring Data i jakie moduły wchodzą w jego skład?
Spring Data to zestaw projektów mających na celu ułatwienie dostępu do danych oraz uproszczenie implementacji warstwy persystencji. Oferuje ujednolicony sposób komunikacji z różnymi bazami danych i dostawcami. Przykładowe moduły:
- Spring Data JPA – integracja z JPA i bazami relacyjnymi.
- Spring Data MongoDB – wsparcie dla bazy MongoDB.
- Spring Data Redis – obsługa bazy Redis.
- Spring Data JDBC – prostsza alternatywa do JPA dla baz relacyjnych.
Materiały:
- Oficjalna dokumentacja Spring Data (EN)
- Spring w akcji, Craig Walls – polskie wydanie (książka)
- Artykuł o Spring Data na javastart.pl (PL)
Jak zdefiniować zapytania metodami Query Methods?
Zapytania definiowane metodami (tzw. Query Methods) opierają się na konwencji nazewniczej. Nazwa metody zawiera wskazówki, według których Spring Data automatycznie generuje odpowiednie zapytania. Przykładowo, w interfejsie repository:
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
List<User> findByAgeGreaterThan(int age);
}
Spring Data tworzy zapytania na podstawie prefiksów (np. findBy, getBy) i nazw pól encji.
Materiały:
- Spring Data JPA – Query Methods (EN)
- Artykuł o Query Methods (PL) (Uwaga: strona Baeldung jest głównie w języku angielskim, niemniej artykuły mogą być tłumaczone w przeglądarce.)
Jak zarządzać transakcjami w Spring Data?
Spring Data korzysta ze wsparcia transakcyjności oferowanego przez Spring. Najczęściej stosowanym rozwiązaniem jest adnotacja @Transactional, którą można umieszczać na metodach lub klasach. Domyślnie Spring zapewnia transakcje dla metod w repozytoriach JPA, ale można je konfigurować poprzez:
- Adnotowanie konkretnych metod serwisów (
@Service) adnotacją@Transactional. - Konfigurowanie reguł propagacji transakcji (np.
REQUIRED,REQUIRES_NEW).
Materiały:
- Dokumentacja Spring – Transakcje (PL) (dokumentacja jest w większości po angielsku, jednak można znaleźć jej fragmenty tłumaczone na polskie blogi)
- Transakcje w Spring (PL)