Spring framework
Z Wikipedii
Spring jest szkieletem wytwarzania aplikacji w języku Java dla platformy J2EE jakkolwiek istnieje też wersja dla środowiska .NET. Powstał on na bazie kodu opublikowanego w książce Roda Johnsona Expert One-on-One J2EE Design and Development (ISBN 0-7645-4385-7). Był on rozwijany przez Johnsona, Juergena Hoellera i innych, którzy założyli firmę [Interface21, która świadczyła usługi związane ze Springiem.
Pierwsze wydanie Springa pojawiło 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 wymagało przyjęcia określonego modelu programowania i narzucało wiele innych ograniczeń. Model EJB okazał się za "ciężki" do wszystkich zastosowań. Koncepcja Springa, który nie wymusza przyjęcia 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 wiele rozwiązań często występujących zagadnień.
Podczas gdy bazowe komponenty szkieletu mogą być używane praktycznie w każdej aplikacji istnieje w nim wiele rozszerzeń, które pozwalają budować aplikacje webowe na bazie J2EE.
Spis treści |
[edytuj] Wprowadzenie do szablonu Spring
Szablon Spring zawiera rozwiązania dla wielu zagadnień technicznych napotykanych przez programistów języka Java oraz organizacje chcące budować aplikację na platformie J2EE. 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 J2EE, 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.
[edytuj] 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ć na podstawie podstawowych komponentów:
- 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 autentykacji
- Szablon zdalnego zarządzania JMX
- Szablon komunikatów JMS
- Szablon wsparcia testowania
[edytuj] Odwrócenie sterowania - kontener IoC
Spring zapewnia bazowane na JavaBeans'ach 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).
[edytuj] Szablon programowania aspektowego
Spring zapewnia wsparcie dla 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].
[edytuj] 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, wsparcia dla obiektów dostępu do danych i strategii transakcji. Bardzo silne wsparcie dla 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.
[edytuj] 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 wsparcie transakcji przez Springa nie wymaga uruchamiania środowiska Java EE (kontenera).
[edytuj] Szablon model-widok kontroler
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 Jakarta 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.
[edytuj] Przypisy
- ↑ 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.
- ↑ 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.
[edytuj] Zewnętrzne linki
- Spring dla praktyków, polska książka o Springu, powstająca na portalu [Java Developer Network PL]
- Spring Framework
- Spring Framework .NET
- Spring User Group Poland
[edytuj] 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