Spring Flashcards

1
Q

Co to jest Spring IoC Container?

A
  • kontener leżący u podstaw Springa
  • odpowiedzialny za** tworzenia, konfigurowanie i zarządzanie cyklem życia beanów**
  • wykorzystuje Dependency Injection do zarządzania różnymi komponentami aplikacji Spring
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Jakie są główne funkcje Spring IoC Container?

A
  1. Tworzenie Obiektów
  2. Wstrzykiwanie Zależności
  3. Zarządzanie Cyklem Życia
  4. Konfiguracja
  5. Aspektowe Programowanie (AOP)
  6. Usługi Kontenera
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

akie są główne implementacje kontenera IoC w Springu?

A
  1. ApplicationContext — zapewnia dodatkową funkcjonalność. Jest zbudowany na interfejsie BeanFactory.
  2. BeanFactory — wstępnie zapakowana klasa zawierająca kolekcję beanów. Tworzy instancję beana, gdy jest to wymagane przez klientów
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Co umożliwia Aspektowe Programowanie (AOP) w kontekście Spring IoC Container?

A

Umożliwia przecinanie i rozwinięcie funkcjonalności beanów, pozwalając na dodanie dodatkowego zachowania do komponentów bez modyfikowania ich głównego kodu.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Jakie są zalety IoC (odwrócenie kontroli)?

A
  1. Separacja zależności od logiki biznesowej.
  2. Elastyczność konfiguracji zależności.
  3. Promocja “Single Responsibility Principle”.
  4. Ułatwienie testowania dzięki wstrzykiwaniu zależności.
  5. Odkładanie inicjalizacji obiektów.
  6. Zarządzanie cyklem życia obiektu przez kontener.
  7. Promocja luźnego powiązania (loose coupling) komponentów.
  8. Jednolita konfiguracja zależności w całej aplikacji.
  9. Wsparcie dla aspektowego programowania (AOP).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Jakie są główne zalety Spring Framework? (

A
  1. Wstrzykiwanie Zależności: Ułatwia modularność i testowalność dzięki kontenerowi IoC.
  2. Wszechstronność: Szeroki zakres modułów, od bezpieczeństwa po integrację z chmurą.
  3. Integracja z Istniejącymi Technologiami: Łatwa integracja z technologiami takimi jak Hibernate, JPA, JMS.
    4.** Zabezpieczenia**: Kompleksowe rozwiązania dzięki Spring Security.
  4. Programowanie Aspektowe (AOP): Oddzielenie logiki biznesowej od przekrojowej.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

@Component

A
  • Oznacza klasę jako komponent Springa.
  • Informuje kontener Springa, że klasa ma być zarejestrowana jako bean.
  • jest używana do oznaczania klas w Springu, które mają zostać automatycznie wykryte przez skanowanie komponentów.
  • spring tworzy instancje klasy w application context
  • pochodne @Service , @Repository
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Do czego służy @Autowired?

A

Umożliwia automatyczne wstrzykiwanie zależności (beanów) w komponencie Springa.
- gdy Spring Boot się włącza skanuje context w poszukiwaniu beanów które mają zależnośći i łaczy ze sobą , dzięki temu componenty są decoupled
- może być używany na konstrutkorze, setterach i fieldach

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Jak działa adnotacja @Service?

A

Oznacza klasę jako serwis w architekturze Springa. Jest to specjalny typ @Component przeznaczony dla warstwy serwisów.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Co oznacza @Repository w Springu?

A

Oznacza klasę jako repozytorium, czyli komponent odpowiedzialny za operacje na bazie danych. Jest to specjalny typ @Component.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

@Controller

A
  • Oznacza klasę jako kontroler w Spring MVC.
  • klasa również staje się beanem
  • Kontroler obsługuje żądania użytkownika i zwraca odpowiedź.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Czym jest @RestController?

A
  • Jest to połączenie @Controller i @ResponseBody.
  • Używany w aplikacjach RESTful, gdzie odpowiedź jest zazwyczaj w formacie** JSON lub XML.**
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Do czego służy @RequestMapping?

A

Definiuje adres URL, pod którym dany kontroler lub metoda kontrolera będzie dostępna.

@RestController
public class ExampleController {

    @RequestMapping(value = "/hello", method = {RequestMethod.GET, RequestMethod.POST})
    public String multipleMethodsHello() {
        return "Hello from either GET or POST request!";
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Jak działa adnotacja @Value?

A

Umożliwia wstrzykiwanie wartości z plików konfiguracyjnych do pól w komponencie Springa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Czym jest @Qualifier?

A

Umożliwia dokładne określenie, który bean ma zostać wstrzyknięty, gdy istnieje kilka kandydatów.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Jakie jest zastosowanie @Transactional?

A
  • Oznacza, że metoda ma być wykonana w kontekście transakcji.
  • Używane głównie w warstwie serwisów do operacji na bazie danych.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

@Bean

A

Używana w klasach konfiguracyjnych do wskazywania metod, które produkują beany do zarządzania przez kontener Springa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

@Configuration

A

Oznacza klasę jako źródło definicji beanów. Klasa taka może zawierać metody oznaczone** @Bean**.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

@Scope

A

Określa zakres beanu. Możliwe wartości to: “singleton”, “prototype”, “request”, “session” i “application”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

@PostConstruct:

A

Oznacza metodę, która ma zostać wykonana po utworzeniu beanu, ale przed jego użyciem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

@PreDestroy

A

Oznacza metodę, która ma zostać wykonana przed zniszczeniem beanu przez kontener.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

@PathVariable

A

Używana w Spring MVC do wiązania wartości segmentu ścieżki URL z parametrem metody.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

@RequestBody

A

Używana w Spring MVC do wskazania, że argument metody powinien być deserializowany z ciała żądania HTTP.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

@RequestParam

A

Wiąże wartość parametru żądania z parametrem metody w kontrolerze Spring MVC.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

@ComponentScan

A

żywana w klasach konfiguracyjnych do wskazania pakietów, które mają zostać przeskanowane w poszukiwaniu komponentów Springa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

@Profile

A

Określa, w jakich profilach dany bean lub konfiguracja powinny być aktywne.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Adnotacje mapaowania żadań HTTP

A

@GetMapping: Mapuje żądania HTTP GET na konkretną metodę.
@PostMapping: Mapuje żądania HTTP POST.
@PutMapping: Mapuje żądania HTTP PUT.
@DeleteMapping: Mapuje żądania HTTP DELETE.
@RequestMapping: Ogólna adnotacja do mapowania żądań; można ją używać z różnymi typami żądań (GET, POST, PUT itp.), określając odpowiedni atrybut method.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

jakie znasz Bean Scope w Springu

A
  1. Singleton – Instancja beana będzie tylko raz i ta sama instancja zostanie zwrócona przez kontener IOC. Jest to zakres domyślny.
  2. Prototype – nowa Instancja beana zostanie utworzona za każdym razem na żądanie.
  3. Request – Instancja bean zostanie utworzona na żądanie HTTP.
  4. Session – Instancja bean zostanie utworzona na sesję HTTP.
  5. Global session – Instancja bean zostanie utworzona podczas globalnej sesji HTTP.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Co to jest Spring MVC?

A

Spring MVC to moduł frameworka Spring zaprojektowany do tworzenia aplikacji internetowych, opierający się na wzorcu projektowym Model-View-Controller (MVC).

30
Q

Na jakie trzy główne komponenty dzieli się wzorzec MVC w Spring MVC?

A

Widok - JSP, Thymeleaf, FreeMarker i inne.

Model - Reprezentuje dane aplikacji, często są to zwykłe obiekty Java (POJOs).

Kontroller - Obsługuje żądania użytkownika, interakcje z modelem i zwraca odpowiedni widok.

31
Q

Sposoby wstrzykiwania beana

A
32
Q

Wstrzykiwanie przez konstruktor zalety i wady

A

Wstrzykiwanie przez konstruktor: Jest to obecnie zalecany sposób wstrzykiwania beanów w Springu, zwłaszcza gdy bean ma wymagane zależności.

Zalety:
1. Nie można stworzyć obiektu bez wymaganych zależności.
2. Beany są niemutowalne po ich utworzeniu, co zwiększa bezpieczeństwo.
3. Promuje wzorzec projektowy jednej odpowiedzialności, ponieważ duże ilości argumentów konstruktora mogą sugerować, że klasa ma zbyt wiele zależności.

Wady:
W przypadku wielu zależności konstruktor może stać się mniej czytelny.

33
Q

Wstrzykiwanie przez setter zalety i wady

A

Wstrzykiwanie przez setter: Używane, gdy zależności są opcjonalne.

Zalety:
1. Umożliwia ustawianie zależności po utworzeniu obiektu.
2. Zwiększa elastyczność, ponieważ pozwala na dynamiczną zmianę zależności w czasie wykonywania.
Wady:
1. Może prowadzić do niezainicjowanych zależności, jeśli setter nie zostanie wywołany.
2. Większe ryzyko mutacji stanu obiektu.

34
Q

Wstrzykiwanie przezpole

A

Wstrzykiwanie przez pole: Jest to najprostszy sposób wstrzykiwania, ale jest rzadziej zalecany.

Zalety:
Minimalna ilość kodu.
Wady:
1. Trudniejsze w testowaniu jednostkowym, ponieważ wymaga użycia refleksji do ustawienia prywatnych pól.
2. Może prowadzić do niemożliwych do zidentyfikowania błędów w przypadku braku odpowiedniej zależności.

35
Q

Jak działa Spring Boot

A

Spring Boot jest rozszerzeniem frameworku Spring, które ma na celu ułatwienie tworzenia aplikacji opartych na Springu poprzez:

  1. Auto-konfigurację: Automatycznie konfiguruje aplikację na podstawie dostępnych zależności.
  2. Startery: Zapewnia zestawy zależności, które można włączyć do projektu, ułatwiając integrację różnych komponentów Springa.
  3. Osadzony serwer: Domyślnie dostarcza osadzone wersje popularnych serwerów, takich jak Tomcat, dzięki czemu można uruchamiać aplikacje bez zewnętrznego serwera.
    4.** Wskaźniki stanu zdrowia i metryk**i: Wbudowane narzędzia do monitorowania i zarządzania aplikacją.
  4. Opinia: Zamiast oferować konfigurację na wszystko, Spring Boot oferuje większość “najlepszych praktyk” jako domyślną konfigurację, co ułatwia szybkie rozpoczęcie pracy.
36
Q

Co robi adnotacja @SpringBootApplication w Spring Boot?

A

Adnotacja @SpringBootApplication jest wygodną adnotacją, która łączy trzy inne adnotacje:

  1. @Configuration: Wskazuje, że klasa może używać metody opartej na @Bean do definiowania beanów dla kontekstu aplikacji.
  2. @EnableAutoConfiguration: Włącza mechanizm auto-konfiguracji Spring Boot, który próbuje automatycznie konfigurować aplikację na podstawie dostępnych zależności.
  3. @ComponentScan: Umożliwia skanowanie komponentów, serwisów, kontrolerów itp. od bieżącego pakietu.
37
Q

różnice między @RequestMapping a @GetMapping:

A
38
Q

Co to jest wstrzykiwanie zależności (Dependency Injection)?

A

Technika w programowaniu obiektowym, która polega na dostarczaniu zależności do komponentu zamiast pozwolić komponentowi samemu je tworzyć lub szukać.

Jest kluczowym elementem inwersji kontroli (IoC) i jest stosowane w ramach frameworków IoC, np. Spring.

39
Q

Przykład tradycyjnego tworzenia zależności vs. wstrzykiwania zależności.

A
40
Q

Zalety Dependency Injection

A
  1. Oddzielenie odpowiedzialności:
    -Zamiast komponentu tworzenia i zarządzania jego zależnościami, te zależności są “wstrzykiwane” z zewnątrz.
  2. Testowalność:
    - łatwo jest podmieniać rzeczywiste implementacje zależności mockami lub innymi wersjami implementacji podczas testowania jednostkowego.
  3. Konfiguracja i kod: - konfiguracja i logika biznesowa są oddzielone, co czyni kod bardziej modularnym i łatwiejszym do zarządzania.

4.Elastyczność i łatwość
- można konfigurować i zarządzać zewnętrznie, co umożliwia łatwą zmianę zależności bez modyfikacji kodu źródłowego.

41
Q

różnice między adnotacjami @RestController i @Controller

A

@Controller w Spring MVC.

42
Q

W jaki sposób w Springu można przechwytywać wyjątki na poziomie kontrolera?

A
  1. Gdy metoda getUser rzuci wyjątek UserNotFoundException, Spring automatycznie przekieruje przetwarzanie do metody handleUserNotFound.
  2. Adnotacja @ExceptionHandler(UserNotFoundException.class) wskazuje, że metoda handleUserNotFound ma być wywołana tylko wtedy, gdy w tym kontrolerze zostanie rzucony wyjątek UserNotFoundException.
  3. Adnotacja @ResponseStatus(HttpStatus.NOT_FOUND) określa, że odpowiedź HTTP powinna mieć kod statusu 404 (Not Found).
    Metoda handleUserNotFound zwraca wiadomość z wyjątku jako odpowiedź.
43
Q

Jak obsłużyć globalnie wszystkie wyjątki w aplikacji Spring?

A
  1. Klasa GlobalExceptionHandler jest opatrzona adnotacją @ControllerAdvice, co oznacza, że będzie ona obsługiwać wyjątki dla wszystkich kontrolerów w aplikacji.
  2. Adnotacja @ExceptionHandler(UserNotFoundException.class) wskazuje, że metoda handleUserNotFound ma być wywołana w przypadku wystąpienia wyjątku UserNotFoundException w dowolnym kontrolerze w aplikacji.
  3. Adnotacja @ResponseStatus(HttpStatus.NOT_FOUND) określa, że odpowiedź HTTP powinna mieć kod statusu 404 (Not Found).
    Metoda handleUserNotFound zwraca wiadomość z wyjątku jako odpowiedź.
44
Q

@ResponseStatus

A

Adnotacja @ResponseStatus pozwala zdefiniować kod statusu HTTP i wiadomość, które mają zostać zwrócone, gdy określony wyjątek jest rzucany.

45
Q

Jak zwrócić własny obiekt odpowiedzi w przypadku błędu w Spring?

A

Można skonstruować odpowiedź manualnie, korzystając z klasy **ResponseEntity<T>.** Można ustawić status, nagłówki i ciało odpowiedzi według własnych potrzeb.</T>

46
Q

BeanFactory vs ApplicationContext

A

BeanFactory
- Jest to podstawowy kontener do tworzenia i zarządzania beanami.
- ładuje beany leniwie
- leżejszy od applicationContext
- dobry gdzie zasoby ograniczone i potrzeba jest prosta kontrola nad beanami

ApplicationContext
- rozszerza bean factory i dodaje więcej funkcji
- ładuje beany z góry przy uruchomieniu
- jest bardzej zaawansowany
- obsługuje internacjonalizację

47
Q

Co robi @ModelAttribute gdy jest stosowana na metodzie kontrolera w Spring?

A
  • powoduje, że wynik tej metody jest automatycznie dodawany do modelu.
48
Q

@ModelAttribute w Parametrach Metody

A
  • Spring tworzy obiekt odpowiadający typowi argumentu, następnie bindowanie danych żądania HTTP do atrybutów tego obiektu.
49
Q

Cel @ModelAttribute

A

ma za zadanie ułatwić pracę z danymi modelu, automatyzować bindowanie danych formularzy do obiektów domenowych oraz pozwalać na przechowywanie danych między żądaniami HTTP.

50
Q

@ResponseBody

A
  • wskazuje, że wartość zwracana przez metodę powinna być użyta jako treść (body) odpowiedzi HTTP.
  • Kiedy metoda kontrolera jest oznaczona adnotacją @ResponseBody, Spring automatycznie konwertuje obiekt zwracany przez tę metodę na format JSON, XML lub inny format zależny od konfigurac
51
Q

Profile w springu

A
  • pozwalają na określenie różnych zestawów beanów i konfiguracji, które mają być aktywne w określonych warunkach.
    Dzięki temu można łatwo przełączać się między różnymi konfiguracjami bez zmiany kodu.
  • ## możesz mieć różne konfiguracje bazy danych dla środowisk deweloperskiego i produkcyjnego, lub chcesz włączyć pewne beany tylko podczas testowania.
52
Q

Jak właczyć profile ?

A
  • Poprzez Ustawienia VM (JVM)
    java -jar -Dspring.profiles.active=dev,application.jar
  • W Plikach Konfiguracyjnych application.properties
    spring.profiles.active=dev,test
53
Q

Czym jest AOP

A
  • programowanie zorientowane aspektowo
  • pozwala oddzielić pewne fragmenty kodu od siebie
  • poprawia modularność tworzonego kodu
  • pozwala wprowadzić dodatkową warstwę kodu i ta warstwa jest wyraźnie odseparowana od właściwego kodu
54
Q

Głowne koncepty AoP

A
  1. Aspekty - moduły zawierające powiązany kod z konkretnymi operacjami np. logowanie, zarządzanie transkacjami
  2. Przecięcia (Join Points) - miejsce w aplikacji gdzie aspekt może zostać zastosowany np. metoda
  3. Porady (advices) akcje podejmowane przez aspekt w punkcie przecięcia (np. before, after)
  4. Pointcut - wyrażenie, które definiuje w których punktach przecięcia aspekt powinien być zastosowany np. wszystkie metody w określonej klasie
  5. wiązanie - proces zastosowanie aspektu w określonych punktach w czasie rwyknoywania
55
Q

Przykłady AoP

A
  • transkacje bazodanowe w springu
  • loggery
  • security
56
Q

Jak uruchomić aspekty ze Spring AoP

A
  • AspectJ
  • w głównej klasie @EnableAspectJAutoProxy(proxyTargetClass=true)
57
Q

Jak korzystać ze Spring AoP

A
  1. @Aspect i @Component
  2. @Around uruchomienia apektu dookoła wywołania metody (jako parametr zawiera poincat)
  3. Nazwa metody jest dowolna, jako parametr przyjmuje ona ProceedingJoinPoint, czyli miejsce w którym następuje wywołanie metody lub rzucenie wyjątku
  4. od, który chcemy wykonać przed wywołaniem metody
  5. Właściwe wywołanie metody\
  6. Kod, który chcemy wykonać po uruchomieniu metody.
  7. Zwrócenie wyniku z danej metody.
58
Q

Zarządzanie transakcjami w springu

A
  • spring pozwala na kontrolowanie transkacji bazodanowych w spójny deklaratywny sposób
  • @Transactional
  • interfejs PlatformTransactionManager
  • interfejsy TransactionDefinition and TransactionStatus:
59
Q

@Transactional

A
  • określa granice transakcji na poziomie metod lub klas bez konieczności ręcznego sterowania transkacjami
  • dana metoda wykonywana w ramach transkacji w razie wyjątku zostanie zrobiony rollback
  • pozwala na określenie polityk propagacji i pozimów izolacji
  • @Transactional(isolation = Isolation.READ_COMMITTED, timeout = 30)
  • nie określając poziomu izolacji będzie domyślna jak w silniku bazy danych
60
Q

PlatformTransactionManager

A
  • interfejs który definiuje ogólny sposób na zarządzanie transkacjami
  • umożliwe abstrahowanie od konkretnego mechanizmu zarządzania transkacjami , co pozwala łatwa zmianę technologii dostępu do danych
  • ## getTransaction(), commit, rollback
61
Q

Jak zarządzać security w spring boot

A
  • Spring security framework
  • klasa SecurityConfig z @Configuration, @EnableWebSecurity
  • możesz używać standardowego flow authentykacji tzn. AuthenticationManager -> AuthProvider -> UserDetailsService
  • można użyć także OAuth2 oraz JWT
62
Q

Czym jest JWT

A
  • kompaktowy, bezpieczny sposób reprezentacji roszczeń (claims) do przesyłania między dwoma stronami.
  • składa się : nagłówka (header), ładunku (payload) i podpisu (signature). Części te są kodowane Base64 i rozdzielone kropkami.
  • nagłówek zawiera informacje o typie tokenu i algorytmie szyfrującym
  • ładunek zawiera roszczenia , uprawnienia
  • podpis - Utworzony przez zakodowanie nagłówka, ładunku i tajnego klucza algorytmem podanym w nagłówku.
63
Q

Użycie JWT w Spring

A
64
Q

Jak aktywować profile w Spring boot

A

spring.profiles.active=dev

65
Q

jak uruchomić jak w env variables ?

A
66
Q

Jakie są minusy na dostarczanie propertisow z CLI, JVM oraz ENV ?

A
  • wymagają różnych komend - problem przy deploymencie (CI/CD pipline)
  • wiele mikroserwisów - wiele propertisów
  • brak kontroli dostępu do danych konfiguracyjnych
  • brak encryption
  • każda zmiana wymaga restartu aplikacji, kontenera
67
Q

Czym jest Spring Boot Actuator

A
  • narzędzie do monitorowania i zarządzanie aplikacjami w czasie rzeczywistym
  • endpointy monitorujące = **health, metrics, info ,env **
  • zbiera metryki - zużycie pamięci, procesora, metryki http
  • ## można zintegrować z grafana itd
68
Q

O czym trzeba pamiętać przy poziomie propagacji i @Transactional ?

A
  • @Transactional Spring tworzy proxy wokół beana aby zarządzać transkacjami
  • proxy działa wtedy gdy wywołanie następuje z zewnątrz tego beana,
  • jeśli metoda w tym beanie wywołuje inna metodę w tym beanie, która również @Transactional to wywołanie nie przechodzi przez proxy i nie są stosowane zasady propagacji
69
Q

Poziomy propagacji

A
  1. Required -> spring sprawdza czy istnieje aktywna transkacja, jeśli nie tworzy ją i wykonuje w transkacji.
  2. Supports - sprawdza czy istnieje transkacja. Jeśli tak to jest wykorzystywana a jak nie to logika wykonana poza transkacją.
  3. Mandatory - sprawdza czy istnieje i wykonuje a jak nie istnieje to rzuca wyjątek
  4. Never - rzuca wyjątek jak nie istnieje\
  5. Requires_NEW - przerywa aktywną transkacje i tworzy nową
  6. Not_supported jeśli istnieje przerywa i wykonuje poza transkacją
70
Q
A