Spring

Spring jest platformą złożoną z wielu projektów, która dedykowana jest do tworzenia aplikacji w języku Java. Jego kluczowym elementem jest kontener wstrzykiwania zależności, jednak przez lata Spring zyskał wsparcie dla wielu technologii i stanowi dziś jeden z kluczowych elementów całego ekosystemu Javy.

spring

Historia

Historia Springa sięga roku 2002 kiedy to w Javie główną platformą do tworzenia aplikacji była J2EE 1.3 z mało lubianą technologią EJB 2.0 na czele. W 2003 pojawiła się jego pierwsza wersja. Wszystko zaczęło się od książki Expert One-on-One J2EE Design and Development napisanej przez Roda Johnsona - ojca chrzestnego Springa, który rozpoczął prace nad Springim wraz z Juergenem Hoellerem i Yannem Caroffem. Już w 2005 roku Spring osiągnął ponad 400 tysięcy pobrań, co jasno wskazywało, że staje się istotnym graczem w świecie Javy.

rod johnson j2ee

Początkowo w skład Springa wchodziły przede wszystkim kontener wstrzykiwania zależności, moduł upraszczający korzystanie z JDBC, elementy programowania aspektowego oraz walidacji. Z czasem zaczęły pojawiać się nowe projekty, które znacznie upraszczały powtarzalne zadania i dawały integrację z wieloma zewnętrznymi systemami.

Dziś istnieje swego rodzaju rywalizacja pomiędzy Springiem a Javą EE i we współczesnych ich wersjach widać bardzo podobne podejście, przenikanie się obu rozwiązań i wzajemne inspiracje.

Projekty Springa

Spring składa się obecnie z wielu osobnych modułów, z których w swoim projekcie możemy wybrać tylko te potrzebne. Poniżej krótki opis najpopularniejszych z nich.

Kurs Spring

Spring framework

Kluczowy element całego Springa, który udostępnia kontener wstrzykiwania zależności.

Spring Data

spring_data

Projekt upraszczający dostęp do baz danych. Początkowo ukierunkowany był na bazy relacyjne, ale wraz ze wzrostem popularności baz obiektowych jak Cassandra, czy grafowych typu Neo4J posiada także integrację z nimi. Główną ideą Spring Data jest zminimalizowanie ilości powtarzalnego kodu, czyli przykładowo jeśli nasza aplikacja wykorzystuje JPA, potrzebujemy stworzyć repozytorium udostępniające podstawowe metody CRUD, to korzystając ze Spring Data całość sprowadza się do stworzenia jednego prostego interfejsu. Przykład:

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import pl.javastart.model.Car;
  
@Repository
public interface CarRepository extends CrudRepository<Car, Long> {
}

Wygodnym elementem jest także moduł Spring Data REST, który w bardzo prosty sposób pozwala także stworzyć RESTowe endpointy udostępniające dane.

Spring MVC

Projekt będący najpopularniejszym frameworkiem MVC wykorzystywanym do tworzenia aplikacji webowych w Javie. Stanowi alternatywę dla JSF (JavaServer Faces) z Javy EE. Spring MVC bazuje na technologii serwletów, czyli kluczowej specyfikacji Javy EE i do działania wymaga kontenera serwletów typu Tomcat, czy Jetty. W najnowszej wersji konfigurację można w całości oprzeć o adnotacje, jednak w starszych projektach można spotkać sporo kodu XML. Projekt wykorzystywany jest do tworzenia zarówno do tworzenia aplikacji z widokiem generowanym po stronie serwera jak i do wystawiania restowych endpointów. Posiada integrację z systemem widoków takimi jak JSP i najpopularniejszym Thymeleaf.

Spring Security

Początkowo Acegi Security. Projekt, który pozwala na zabezpieczenie swojej aplikacji i stworzenie systemu uwierzytelnienia i autoryzacji. Najczęściej wykorzystywany w połączeniu ze Spring MVC, ale równie dobrze nadaje się do zabezpieczenia aplikacji tworzonych w Javie EE.

Dzięki swojej modułowej budowie pozwala na wygodny sposób definiowania własnego schematu uwierzytelnienia, posiada też integrację np. z protokołem LDAP.

Spring AOP

Projekt udostępniający model programowania aspektowego w aplikacjach korzystających ze Springa. Silnie korzysta z refleksji oraz pozwala na wykorzystanie najpopularniejszej w tej dziedzinie biblioteki AspectJ.

Spring Boot

spring boot

Konfiguracja w Springu nie należy do najprostszych, szczególnie gdy porównalibyśmy ją do niemal zerowej konfiguracji, którą znamy z aplikacji tworzonych we współczesnej Javie EE. Problem Javy EE polega jednak na tym, że konfiguracją w dużej mierze zajmuje się serwer aplikacji, a aplikacje pisane w Springu najczęściej uruchamiane są w samym kontenerze serwletów. Spring Boot stanowi więc tak naprawdę alternatywę dla tego co znamy od lat z Javy EE i ukrywa całą skomplikowaną konfigurację. Na podstawie skanowania pakietów oraz informacji zawartych w pliku application.properties Spring Boot utworzy dla nas niezbędne obiekty (np. EntityManagerFactory dla JPA).

Pozostałe

Spring składa się jeszcze z wielu innych projektów jak Spring Batch, Spring for Android, czy Spring Social oraz korzysta z wielu specyfikacji Javy EE. Spring MVC bazuje na serwletach, Spring Security na filtrach, walidacja realizowana jest przez Bean Validation itp.

Narzędzia

Istnieje kilka narzędzi ułatwiających tworzenie aplikacji w Springu.

Spring Tool Suite

sts

Pivotal, firma odpowiedzialna za rozwój Springa, udostępniają i rozwijają także środowisko Spring Tool Suite. Bazuje ono na Eclipse IDE i sprawia, że nawet tworzenie konfiguracji w znienawidzonym XMLu nie jest aż takie złe. W odróżnieniu np. od IntelliJ IDEA, STS jest całkowicie darmowe, a ponieważ bazuje na eclipse można je w bardzo łatwy sposób rozszerzać o dodatkowe pluginy.

IntelliJ IDEA

IntelliJ IDEA firmy JetBrains to narzędzie, które praktycznie zdominowało rynek. Nie przeszkodziło nawet to to, że jest płatne i konkuruje z darmowymi odpowiednikami. Zainteresowanych odsyłam do artykułu: Spring i IntelliJ IDEA.

Visual Studio Code

Visual Studio Code to darmowe narzędzie tworzone przez Microsoft. Nie jest tak rozbudowane jak IntelliJ, ale stanowi ciekawą i darmową alternatywę. Zainteresowanych odsyłam do artykułu: Spring i Visual Studio Code.

vsc i spring

Dodatkowe treści

Jeśli szukasz więcej informacji na temat Springa to mam dla Ciebie kilka linków:

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.