Przejdź do zawartości

Spring Framework

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez Jbw56 (dyskusja | edycje) o 11:22, 1 sie 2012. Może się ona znacząco różnić od aktualnej wersji.

Spring jest szkieletem tworzenia aplikacji (ang. application framework) w języku Java dla platformy Java EE/J2EE (jakkolwiek istnieje też wersja dla środowiska .NET).

Spring powstał na bazie kodu opublikowanego w książce Roda Johnsona Design and Development (ISBN 0-7645-4385-7). Pozytywny odzew czytelników sprawił, że był on dalej rozwijany przez autorów (m.in. Johnsona, Juergena Hoellera), którzy postanowili założyć firmę Interface21, świadczącą usługi konsultingowe związane z tym szablonem.

Pierwsze wydanie Springa pojawiło się w lipcu 2003 roku na bazie licencji "Apache 2.0 licence". Wersja 1.0 ukazała się w marcu 2004 roku.

Spring powstał jako alternatywa dla programowania aplikacji z użyciem Enterprise JavaBeans. Programowanie z użyciem EJB narzucało wiele innych ograniczeń – wymagając między innymi przyjęcia określonego modelu tworzenia oprogramowania. Funkcjonalność EJB okazała się także za "ciężka" do wszystkich zastosowań (w małych projektach wykorzystywano tylko niewielką część oferowanej przez EJB funkcjonalności – jednocześnie stworzenie małej aplikacji w środowisku EJB wymagało nakładu pracy jak przy aplikacji dużej). Odmienna koncepcja Springa – lekkiego szablonu, który nie wymusza specyficznego modelu programowania, stała się bardzo popularna wśród programistów Javy. Spring oferuje dużą swobodę w tworzeniu rozwiązań, a jednocześnie jest dobrze udokumentowany i zawiera rozwiązania wielu zagadnień, często występujących w programowaniu.

Podczas gdy bazowe komponenty Springa mogą być używane praktycznie w każdej aplikacji, istnieje w nim wiele rozszerzeń, które pozwalają budować aplikacje webowe na bazie Java EE.

Wprowadzenie do szablonu Spring

Szablon Spring zawiera rozwiązania dla wielu zagadnień technicznych napotykanych przez programistów języka Java oraz organizacji chcących budować aplikację na platformie Java EE. Wielość komponentów, które zawiera Spring, powoduje, że czasami trudno je rozróżnić. Spring nie jest powiązany tylko i wyłącznie ze środowiskiem Java EE, jakkolwiek jego integracja w tym obszarze jest ważnym powodem jego popularności.

Spring jest prawdopodobnie znany najbardziej z oferowania cech, które pozwalają w łatwiejszy sposób tworzyć złożone systemy z pominięciem modeli programowania, które wymuszały historyczne rozwiązania. Oprócz tego jest ceniony za wypromowanie wcześniej niedocenianych funkcjonalności i wprowadzenie ich do powszechnie stosowanych praktyk.

Moduły szablonu Spring

Spring może być rozważany jako zbiór pomniejszych szablonów lub "szablon zbudowany z szablonów". Większość z tych szablonów została zaprojektowana aby pracować niezależnie, jakkolwiek użycie ich razem zapewnia większą funkcjonalność. Szablony te można podzielić ze względu na podstawowe komponenty:

  • Kontener IoC
  • Szablon programowania aspektowego
  • Szablon dostępu do danych
  • Szablon obsługi transakcji
  • Szablon Model-Widok-Kontroler
  • Szablon zdalnego dostępu
  • Szablon autoryzacji i uwierzytelniania
  • Szablon zdalnego zarządzania JMX
  • Szablon komunikatów JMS
  • Szablon obsługi testowania

Odwrócenie sterowania – kontener IoC

Spring zapewnia bazowane na JavaBeans zarządzanie konfiguracją, stosowanie zasad Odwrócenia sterowania (ang. Inversion-of-Control, IoC). Pozwala to na szybsze i prostsze składanie aplikacji. IoC, kojarzone jest także ze "Wstrzykiwaniem zależności" (ang. Dependency Injection), jakkolwiek to drugie jest pojęciem węższym.

Zasady IoC używane są w Springu jako technika, która pozwala przekazać na zewnątrz (ang. externalize) tworzenie i zarządzanie zależnościami pomiędzy komponentami programu – zależności konfigurowane są w pliku, a zarządzanie wykonywane jest przez kontener IoC.

Przykładowo: wykonanie pewnej operacji przez klasę Foo zależy od instancji klasy Bar. W tradycyjnym podejściu, klasa Foo musiałaby stworzyć instancję klasy Bar używając operatora new lub otrzymać taką instancję z klasy fabrykującej. W podejściu IoC, instancja klasy Bar dostarczana jest do Foo w czasie wykonania programu przez zewnętrzny proces (kontener wstrzykuje zależność do klasy Foo).

Szablon programowania aspektowego

Spring zapewnia obsługę Programowania aspektowego (ang. Aspect Oriented Programming, AOP) zapewniające takie usługi jak zarządzanie transakcjami. AOP dostarcza możliwości zaimplementowania wspólnej logiki, która dotyka wielu miejsc w jednym miejscu i automatyczne jej dodawanie, tam, gdzie jest potrzebna[1].

Szablon dostępu do danych

Warstwa abstrakcji JDBC, opakowuje standardowy mechanizm JDBC rzucając znaczące wyjątki zorganizowane w hierarchię (nie ma potrzeby wyciągania kodów dostawcy z wyjątku SQLException). Podejście to znacznie redukuje ilość kodu, którą musi napisać programista, aby obsłużyć błędy. Nie ma potrzeby pisania kolejnych bloków finally. Wyjątki związane z JDBC są zgodne z hierarchią wyjątków generycznego obiektu dostępu do danych (DAO) w Springu.

Ta sama warstwa abstrakcji pozwala integrować aplikację z Hibernate, Java Data Objects oraz mapami SQL iBATIS-a: w sensie uchwytów do zasobów, obsługi obiektów dostępu do danych i strategii transakcji. Obsługa Hibernate z mnóstwem udogodnień IoC, które wspomagają typowe zagadnienia integracji Hibernate z aplikacjami. Wszystkie one są zgodne z generycznymi hierarchiami wyjątków w transakcjach i DAO.

Szablon zarządzania transakcjami

Spring zapewnia generyczną warstwę abstrakcji (ang. generic abstraction layer) dla zarządzania transakcjami. Pozwala na dołączanie własnych komponentów zarządzających transakcjami (ang. transaction manager) i łatwe odgraniczenie transakcji bez zagłębiania się w niskopoziomowe szczegóły.

Spring udostępnia generyczne strategie dla Java Transaction API (JTA) oraz pojedynczych źródeł (DataSource) Java Database Connectivity (JDBC). W odróżnieniu od czystego JTA lub EJB CMT, obsługa transakcji przez Springa nie wymaga uruchamiania środowiska Java EE (kontenera).

Spring zapewnia elastyczny trójpowłokowy[2] szablon Model-Widok-Kontroler (MVC), zbudowany na bazowej funkcjonalności Springa. Programiści otrzymują wysoki stopień kontroli nad szablonem poprzez interfejsy strategii (strategy interfaces). Obsługuje on wiele technologii, w tym: strony JSP, FreeMarker, Velocity, Tiles, iText, Apache POI. Środkową powłokę można łatwo połączyć z powłoką innego szablonu MVC, w tym Apache Struts, WebWork albo Tapestry.

Problem z wzorcem projektowym MVC polega na stworzeniu przejrzystego szablonu dla stworzenia części Modelu (np. w Apache Struts). Możliwość współpracy Springa z takimi wzorcami oznacza, że programiści mogą szybko zrefaktorować (ang. refactoring) nieudaną implementację i używać springowej warstwy abstrakcji JDBC.

  1. AOP, działa na zasadzie Dynamicznego Proxy (ang. Dynamic Proxy, dynamicznego – w sensie tworzenia go w czasie wykonania programu). Przykładowo, za pomocą AOP można do mutatorów (ang. setters, mutators) klasy DAO automatycznie dodać fragmenty kodu zarządzające transakcjami. AOP działa na zasadzie wzorca dekorator, który w tym przypadku dekoruje metody klasy dodatkowym kodem wykonywanym fabrykując proxy. Proxy to opakowuje istniejący obiekt DAO; wywołanie metod DAO przez stworzony AOP obiekt opakowujący wywołuje dodatkowo kod zarządzający transakcjami.
  2. Pojęcie powłoka (ang. tier) jest tu używane do rozróżnienia od pojęcia warstwa (ang. layer). W języku polskim przyjęło się mieszać te dwa pojęcia.

Linki zewnętrzne

Literatura

  • J2EE Development Without EJB, Rod Johnson, Jürgen Höller, Wiley, 2004, ISBN 0-7645-5831-5
  • Professional Java Development with the Spring Framework, Rod Johnson, Jürgen Höller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu, Wiley, 2005, ISBN 0-7645-7483-3