Spring framework Paweł Kędziora Marek Lewandowski
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 1
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 2
Motywacje Po co komu framework? szybciej, taniej, lepiej. Po co komu kolejny framework? istniejące rozwiązania są zbyt proste (dużo dodatkowego nakładu pracy programisty), istniejące rozwiązania zbyt skomplikowane (przerost formy nad treścią). Spring framework 3
2003 Rod Johnson, Juergen Hoeller Spring framework 4
Spring według Johnsona Zintegrowana platforma oferująca solidną infrastrukturę dla podstawowych aspektów każdej aplikacji Minimalizacja stopnia złożoności platformy Nieinwazyjność Prostota testowania Łatwość rozbudowy Spring framework 5
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 6
Architektura Spring Spring framework 7
Architektura - Core fundament framework a implementuje IoC (Inversion of Control) poprzez dependency injection wzorzec projektowy fabryka Bean (z wzorcem singleton) dostępny w postaci samodzielnej biblioteki udostępnia automatyczne dopasowywanie zależności Spring framework 8
Architektura - Context warstwa ponad Core zapewnia dostęp do Bean w stylu przypominającym JNDI walidacja wsparcie dla EJB wsparcie dla komunikatów (resource bundles, event propagation, resource loading, servlet container) Spring framework 9
Architektura - DAO abstrakcyjna warstwa JDBC wspiera programistę w procesie programowania komunikacji z bazą danych i obsługi błędów wsparcie dla zarządzania transakcjami Spring framework 10
Architektura - ORM zawiera warstwy wspierające popularne mapowania obiektowo relacyjne (JDO, Hibernate, ibatis) korzystanie z ORM umożliwia użycie mapowań w połączeniu z innymi cechami oferowanymi przez Spring (np. zarządzanie transakcjami) Spring framework 11
Architektura - AOP AOP (Aspect Oriented Programing) aspekt - wydzielona funkcjonalnie część programu, realizująca konkretne zadanie i koncentrująca się tylko na problemie, którego dotyczy (np. logowanie, monitorowanie aplikacji, zarządzanie transakcjami). AOP Alliance pozwalający definiować punkty złączeń (join points), punkty przecięć (pointcuts), przechwytywacze metod (method interceptors) Spring framework 12
Architektura - Web pakiet Web zawiera podstawowe cechy integracji aplikacji zorientowanych na działanie w ramach sieci WWW (web-oriented application context, servlet listeners) pakiet integrowany z Struts lub WebWork Spring framework 13
Architektura Web MVC implementacja Model View Controller dla aplikacji web. zapewnia oddzielenie interfejsu użytkownika od warstwy logicznej aplikacji z zachowaniem możliwości użycia pozostałych cech Spring Framework (np. walidacji). Spring framework 14
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 15
DAO - szczegóły DAO (Data Access Object) ustandaryzowane ułatwienie w pracy z technologiami takimi jak: JDBC, Hibernate, JDO. przechwytywanie powstałych wyjątków niezależnie od stosowanej technologii. Spring framework 16
DAO - szczegóły manualna implementacja wzorca: implementacja fabryki obiektów DAO implementacja klasy przechwytującej wyjątki SQLException implementacja klas DAO Spring framework 17
DAO - szczegóły DAO w Spring zbiór abstrakcyjnych klas zawierających mechanizmy służące do wskazywania źródła danych oraz ustawienia konfiguracyjne specyfikowane dla różnych technologii: JdbcDaoSupport HibernateDaoSupport JdoDaoSupport JpaDaoSupport (od Spring 2.0) Spring framework 18
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 19
Dostęp do bazy danych Spring dostarcza abstrakcyjny framework JDBC składający się z czterech pakietów: org.springframework.jdbc.core zawiera klasę JdbcTemplate, oraz towarzyszące klasy i interfejsy, org.springframework.jdbc.datasource zawiera klasy umożliwiające łatwy dostęp do danych oraz uruchamianie kodu JDBC poza kontenerem J2EE, org.springframework.jdbc.object zawiera klasy reprezentujące zapytania RDBMS, org.springframework.jdbc.support zawiera m.in. tłumaczenia SQLException. Spring framework 20
JdbcTemplate tworzy i zwalnia zasoby zamyka połączenie z bazą danych przechwytuje i przekazuje wyjątki SQLException wykonuje polecenia: query, update, wywołuje procedury składowane oraz tworzy zbiór wynikowy z iteratorem programista koncentruje się na zamodelowaniu kodu przygotowującego zapytanie oraz prezentującego wyniki Spring framework 21
DataSource działa jak fabryka połączeń (connection factory) pozwala oddzielić kod odpowiedzialny za przygotowanie połączenia i zarządzanie transakcjami od kodu aplikacji dwa sposoby podłączenia się do źródła danych: JNDI użycie implementacji dostarczonej przez Spring (np. DriverManagerDataSource): Spring framework 22
SQLExceptionTranslator interfejs, który może być zaimplementowany przez klasy tłumaczące pomiędzy SQLException a org.springframework.dao.dataaccessexception. domyślną implementacją jest SQLErrorCodeSQLExceptionTranslator, który stosuje następujące reguły dopasowania: użyj translacji zdefiniowanej przez programistę dopasuj kod błędu (uzyskany z SQLErrorCodesFactory) i wyszukaj odpowiedni komunikat metadanych bazy danych użyj translacji odwrotnej (fallback translation) domyślnie SQLStateSQLExceptionTranslator Spring framework 23
Wykonywanie zapytań zapytanie zwracające pojedynczą krotkę: Spring framework 24
Wykonywanie zapytań zapytanie zwracające zbiór krotek Spring framework 25
Wykonywanie zapytań modyfikacja danych: Spring framework 26
Modelowanie JDBC - Java pakiet org.springframwork.jdbc.object zawiera klasy umożliwiające zorientowany obiektowo dostęp do bazy danych. Wynik wykonywanego zapytania jest listą obiektów z kolumnami relacji mapowanymi na właściwości obiektu. dostępne operacje: query, update, delete, insert. Spring framework 27
MappingSqlQuery Spring framework 28
SqlUpdate Spring framework 29
StoredProcedure Spring framework 30
SqlFunction SqlFunction służy do obsługi zapytań zwracających jako wynik pojedynczą krotkę (np. select user(), select sysdate from dual ): Spring framework 31
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 32
Spring Web Framework Charakterystyka Spring MVC Własna implementacja wzorca MVC Wygodne mapowanie i obsługa żądań Pełne wsparcie dla formularzy Możliwość integracji z wieloma technologiami budowania widoków Biblioteki znaczników Wsparcie dla istniejących framework ów Struts Tapestry WebWork JavaServerFaces.. Spring framework 33
Architektura Web MVC. Spring framework 34
Architektura Web MVC Łańcuch filtrów Mapowanie żądań na dane kontrolery Warstwa obiektów przechwytujących (ang.interceptors) Kontrolery Obiektry wyboru widoku (ang. view resolvers) Spring framework 35
Łańcuch filtrów(1) Filtry znajdują się poza Spring ApplicationContext Implementacja filtrów z wykorzystaniem obiektów klasy DelegatingFilterProxy Konfiguracja DelegatingFilterProxy w web.xml Konfiguracja właściwego filtra w pliku application-servlet.xml Spring framework 36
Łańcuch filtrów (2) Kofiguracja DelegatingFilterProxy (web.xml) Spring framework 37
Łańcuch filtrów (3) Konfiguracja Filtra jako spring-managed bean Spring framework 38
Filtry zastosowanie Logowanie i audytowanie Monitoring Filtry konwersji obrazów Filtry kompresji i kodowania danych Konwersje XSLT Inne.. Spring framework 39
Obiektry przechwytujące Spring framework 40
Obiektry przechwytujące(2) Implementacja metod: prehandle() wywołane przed akcją kontrolera posthandle() wywołane po akcji kontrolera, ale przed renderowaniem widoku, dostęp do ModelAndView aftercompletion() wywołane po wyrendererowaniu widoku. Dostęp do wyjątków występujących podczas przetwarzania żądania. Spring framework 41
Konfiguracja w application-servlet.xml Obiektry przechwytujące(3) Spring framework 42
Kontrolery AbstractController CommandControllers AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController MultiActionController Spring framework 43
Spring MVC. Kontrolery(1) AbstractController rozszerzana przez pozostałe kontrolery czy wymaga sesji / czy synchronizować z sesją użytkownika caching directive / mimetype setting nadpisanie handlerequestinternal() Spring framework 44
Spring MVC. Kontrolery(2) CommandControllers AbstractCommandController wiązanie parametrów żądania ze wskazanym obiektem walidacja brak obslugi formularzy. AbstractFormController obsluga formularzy Command Object / walidacja pól Obsługa błednie wysyłanych formularzy (resubmission) Spring framework 45
CommandControllers c.d. SimpleFormController Command Object (formbackingobject()) nazwa widoku po przetworzeniu formularza (success). walidacja AbstractWizardFormController lista widoków wchodzących w skład wizarda status: finish, cancel, page_change Przechodzenie pomiędzy widokami w wizardzie (nawet gdy walidacja się nie powiodła dirty back, dirty forward ) Zmiana kolejności stron / omijanie wybranych stron bieżący widok zapisany w sesji Spring framework 46
Kontrolery(4) MultiActionController grupowanie funkcjonalności w jednym kontrolerze metody o formacie: ModelAndView actionname(httpservletrequest request,httpservletresponse response); wywoływanie metod poprzez rozwiązywanie nazw: ParameterMethodNameResolver (paramname) http://.../index.view?testparam=testit InternalPathNameResolver http://.../testing.view PropertiesMethodNameResolver (definiujemy mapowanie) http://.../test/welcome.html=doit Spring framework 47
Mapowanie żądań Umożliwia powiązanie przychodzących żądań z odpowiednimi kontrolerami/obiektami przechwytującymi. Uzyskanie nazwy przypisanego kontrolera, następnie listy ewentualnych obiektów przechwytujących. Rodzaje mapowań kontrolerów: BeanNameUrlHandlerMapping SimpleUrlHandlerMapping Spring framework 48
Obiekty wyboru widoków. Odwzorowanie pomiędzy nazwami logicznymi widoków a faktycznymi widokami. InternalResourceViewResolver (prefix, suffix) ResourceBundleViewResolver (plik.properties) Widoki - wspierane technologie: JSP & JSTL, Velocity templates, JSF, XSLT, FreeMarker, Tapestry Spring framework 49
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 50
Spring 2.0 łatwiejsza konfiguracja kontenera IoC łatwiejsza konfiguracja AOP wsparcie dla aspektów @AspectJ łatwiejsza konfiguracja deklaratywnego zarządzania transakcjami wsparcie dla bean napisanych w językach innych niż Java Spring framework 51
Plan prezentacji Motywacje Architektura Spring DAO, dostęp do bazy danych, Web MVC Spring 2.0 Podsumowanie Spring framework 52
Podsumowanie bardzo dobry, kompleksowy framework do tworzenia aplikacji, prosty do opanowania dla programistów znających technologię JavaBeans, implementuje sprawdzone wzorce projektowe (singleton, MVC, DAO), zintegrowany z narzędziami mapowania O/R, wspiera programowanie aspektowe, bardzo młoda technologia, bardzo dobra pomoc (zarówno oficjalna dokumentacja jak i nieformalne grupy użytkowników, blogi, fora dyskusyjne). Spring framework 53
Dziękujemy za zapoznanie się z prezentacją! Prosimy o zadawanie pytań