~~NOCACHE~~ ~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~ ===== Zajęcia 14 i 15. - Framework Spring i wzorzec MVC ===== {{zajecia:java_2026_1:179_1.png}} **Co to jest Spring?** Spring to zaawansowana platforma do tworzenia aplikacji w Javie. Składa się z wielu modułów. Kluczowym elementem jest kontener IoC (Inversion of Control) udostępniający mechanizm wstrzykiwania zależności (Dependency Injection), co przyspiesza składanie aplikacji. Spring to „framework frameworków” i jeden z najpopularniejszych frameworków w Javie. ==== Oczywiste zalety Springa ==== * Gotowe szablony wspierające wiele technologii (JDBC, Hibernate, JPA itd.) * Luźne powiązanie między komponentami * Łatwość testowania aplikacji * Lekkość - wybieramy tylko potrzebne komponenty * Szybkość prac developerskich * Wysoki poziom abstrakcji * Silne wsparcie społeczności i dostawców {{zajecia:java_2026_1:181_1.jpg}} **Spring - moduły** * Test - warstwa wspierająca testy (JUnit, TestNG) * Spring Core Container - podstawowe moduły: * Core i Beans - IoC oraz DI * Context - remoting, I18N, EJB, JMS * Expression Language - wsparcie dla setterów/getterów, wywołań metod, operatorów * AOP, Aspects i Instrumentation - zaawansowane techniki programowania aspektowego * Data Access/Integration - integracja z bazami danych * Web - wsparcie dla aplikacji webowych ==== Drobne wtrącenie - Spark ==== Istnieje też mikroframework Spark (nie mylić z Apache Spark), skierowany na prostotę i minimalizm - przydatny w aplikacjach o ograniczonych zasobach (np. Raspberry Pi). Dokumentacja: [[https://sparkjava.com/|Spark Java]] ==== Dokumentacja Spring ==== Strona projektu: [[https://spring.io/|spring.io]] Spring w IntelliJ IDEA: [[https://www.jetbrains.com/help/idea/spring-support.html|Spring support in IntelliJ IDEA]] ==== Automatyzacja budowania projektów ==== Do zarządzania zależnościami i budowaniem projektów najpopularniejsze są Maven i Gradle. Dla Springa wygodnym narzędziem jest Spring Initializr (https://start.spring.io) - generuje szablon projektu z konfiguracją. {{zajecia:java_2026_1:185_1.png}} {{zajecia:java_2026_1:185_2.png}} **Maven i Gradle** - Dokumentacja Maven: [[https://maven.apache.org/|maven.apache.org]] - Dokumentacja Gradle: [[https://gradle.org/|gradle.org]] {{zajecia:java_2026_1:186_1.png}} **Wzorzec architektoniczny MVC** - M - Model: warstwa logiki aplikacji - V - View (Widok): warstwa interfejsu użytkownika, prezentująca dane z modelu - C - Controller: warstwa przyjmująca dane od użytkownika, aktualizująca model i odświeżająca widoki ==== Spring Web MVC (Spring MVC) ==== Kluczowe funkcjonalności Spring Web MVC: * DispatcherServlet - dyspozytor żądań, deleguje przetwarzanie do odpowiednich handlerów. * Request mapping - mapowanie żądań za pomocą adnotacji (@RequestMapping oraz skrótów: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping). Handler methods i parametry: * @RequestParam - parametry zapytania (?klucz=wartość) * @PathVariable - parametry ścieżki (…/parametr) * @RequestBody - mapowanie body żądania na obiekt metody * @RequestPart - obsługa multipart/form-data * @ResponseBody - konwersja zwracanego obiektu na body odpowiedzi ==== Obsługa wyjątków i Controller Advice ==== * @ExceptionHandler - oznacza metodę obsługującą wyjątki (można stosować per-kontroler) * @ControllerAdvice - klasa globalnej obsługi wyjątków (metody oznaczone @ExceptionHandler) ==== Część praktyczna ==== Podzielona na dwie części: * Część 1: przygotowanie środowiska w IntelliJ IDEA do pracy ze Springiem * Część 2: prosta aplikacja webowa w Springu wykorzystująca wzorzec MVC **Uwaga:** Aby w pełni korzystać z integracji Springa w IntelliJ, przydatna jest wersja Ultimate (licencje studenckie dostępne od JetBrains).