1 / 32

Spring podstawy

Spring podstawy. Plan wykładu. Co to jest Spring ? JavaBeen i wstrzykiwanie zależności. Historia Spring. J2EE jest zbyt skomplikowane, encyjne EJB są przestarzałe, złożone, nadużywane i prawie zbędne, lepiej wykorzystywać interfejsy niż dziedziczenie,

kareem
Télécharger la présentation

Spring podstawy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spring podstawy

  2. Plan wykładu • Co to jest Spring? • JavaBeen i wstrzykiwanie zależności Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  3. Historia Spring • J2EE jest zbyt skomplikowane, • encyjne EJB są przestarzałe, złożone, nadużywane i prawie zbędne, • lepiej wykorzystywać interfejsy niż dziedziczenie, • komponenty JavaBean doskonale się nadają do tworzenia aplikacji, • paradygmat obiektowy jest ważniejszy niż implementacja, • obsługiwane wyjątki są nadużywane w aplikacjach Java, • kluczową rolę pełni możliwość niezależnego testowania poszczególnych modułów. Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  4. Co to jest Spring • Wielowarstwowy szkielet aplikacji Java/J2EE zawierający • lekki kontener umożliwiający scentralizowane zarządzanie i łączenie komponentów JavaBean i POJO, • warstwę zarządzania transakcjami, • warstwę obsługi JDBC, • moduły umożliwiające integrację z Toplink, Hibernate, JDO i iBATIS za pomocą standardowych DAO, • pełnowartościowe środowisko obsługujące paradygmat programowania aspektowego AOP, • elastyczne środowisko do tworzenia aplikacji internetowych zgodnie z modelem MVC umożliwiające integrację ze Struts, WebWork,Tapestry; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  5. Architektura Spring (I) • Spring jest uzupełnieniem serwerów aplikacji • cały szkielet tworzony z perspektywy aplikacji a nie serwera • Pełna modułowość szkieletu • można wykorzystać dowolną część Spring niezależnie od pozostałych • Wysoka konfigurowalność projektów • Nie uzależniamy kodu aplikacji od naszego API Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  6. Architektura Spring (II) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  7. Składniki Spring (I) • Kontener • podstawowa część architektury, głównym składnikiem jest BeanFactory zapewniająca mechanizm IoC (Inversion of Control) • Spring context • plik konfiguracyjny dostarczający opis środowiska: JNDI, EJB, wielojęzyczność, walidacja, itp. • SpringAOP • moduł implementujący mechanizm AOP (Aspect-Oriented Programming) i zapewniający transakcyjność przetwarzania Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  8. Składniki Spring (II) • SpringDAO • hierarchia wyjątków ujednolicająca kody błędów różnych baz danych • Spring ORM • szablony ułatwiające korzystanie z narzędzi ORM • Spring Web module • integracja z Jakarta Struts i dostarczanie kontekstu aplikacjom webowym • SpringMVC framework • implementacja MVC obsługująca szeroką gamę technologii Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  9. Podstawowe założenia • Używamy POJO (plain old java object) • Framework dostarcza kontener dla obiektów • Framework zarządza tworzeniem obiektów • Większość naszego kodu "nie wie" o istnieniu kontenera • Duża elastyczność i konfigurowalność (silny XML!) • Integracja i unifikacja dostępu do zewnętrznych zasobów i technologii (np. Baz danych) • Projektowanie i programowanie przez interfejsy Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  10. Spring Bean • Wszystko jest beanem! • Beany to dowolne obiekty zarządzane przez kontener Springa. • Beany nie muszą implementować żadnego interfejsu, ani rozszerzać żadnej klasy • Beany zazwyczaj produkowane są przez fabrykę Springa. • Beany definiujemy w kontekście aplikacji za pomocą XML lub properties, kodu Javy lub innych metod. Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  11. Deklaracja Bean • Każdy bean ma unikalny identyfikator i klasę. • Poniższa deklaracja XML definiuje najprostszy bean <bean id="prostyBean" class="spring.Bean" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  12. Atrybuty Bean • Najważniejsze atrybuty beanow deklarowane w XMLu: • id - identyfikator beana • class - klasa beana • abstract - czy jest to bean abstrakcyjny • autoWire - autoinjectowanie • singleton - czy bean jest singletonem • parent - nadklasa beana • init-method - metoda wywoływana przy inicjacji • lazy-init - czy inicjacja ma być leniwa • destroy-method - metoda wywoływana przy niszczeniu beana Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  13. Wstrzykiwanie zależności • Użytkownik nie tworzy i nie łączy obiektów w aplikacji, lecz opisuje zależności między poszczególnymi klasami. Kontener jest w pełni odpowiedzialny za tworzenie obiektów i ich łączenie • Metody implementacji wzorca IoC: • obiekty implementują specjalny interfejs do wyszukiwania obiektów zależnych • zależności są ustawiane w obiektach przez metody setter • zależności są ustawiane w obiektach przez konstruktor Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  14. Wstrzykiwanie zależności przez settery (I) public class PrzykladowyBean { private FirstBean beanOne; private SecondBean beanTwo; private int i; public void setBeanOne(FirstBean beanOne) { this.beanOne = beanOne; } public void setBeanTwo(SecondBean beanTwo) { this.beanTwo = beanTwo; } public void setIntegerProperty(int i) { this.i = i;} } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  15. Wstrzykiwanie zależności przez settery (II) <bean id=" przykladowyBean" class=„przyklady. PrzykladowyBean"> <property name="beanOne” ref bean=”firstBean"/> </property> <property name="beanTwo" ref=”secondBean"/> <property name="integerProperty" value="1"/> </bean> <bean id=„firstBean" class=”przyklady.FirstBean"/> <bean id=„secondBean" class=”przyklady.SecondBean"/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  16. Wstrzykiwanie zależności przez konstruktor (I) public class PrzykladowyBean { private FirstBean beanOne; private SecondBean beanTwo; private int i; public PrzykladowyBean( FirstBean firstBean, SecondBean secondBean, int i) { this.beanOne = firstBean; this.beanTwo = secondBean; this.i = i; } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  17. Wstrzykiwanie zależności przez konstruktor (II) <bean id=”przykladowyBean" class=„przyklady.PrzykladowyBean"> <constructor-arg> <ref bean=„firstBean"/> </constructor-arg> <constructor-arg ref=„secondBean"/> <constructor-arg type="int" value="1"/> </bean> <bean id=„firstBean" class=”przyklady.FirstBean"/> <bean id=„secondBean" class=”przyklady.SecondBean"/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  18. Inicjalizacja Bean <bean id="msg" class="spring.msg"> <property name="message" value="Hello" /> <property name="names"> <list> <value>Marek</value> <value>Anna</value> <value>Jan</value> <value>Ewa</value> </list> </property> <property name="number" value="13" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  19. Inicjalizacja Bean - przykład (I) class Pokoj { String nazwa; String lokalizacja; .... } class Uzytkownik { String imie; Pokoj pokoj; .... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  20. Inicjalizacja Bean - przykład (II) <beans> <bean id=„uzytkownikBean" class="spring.Uzytkownik"> <property name=„imie" value="Marek"/> <property name=„pokoj” ref bean=„pokojBean"/> </property> </bean> <bean id=„pokojBean" class="spring.Pokoj" > <property name=„nazwa" value=„27C"/> <property name=„lokalizacja" value=„B2"/> </bean> </beans> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  21. Metoda inicjalizacyjna • Istnieje możliwość wskazani własnych metod do inicjalizacji oraz destrukcji bean’a. public class Foo { private boolean initialized = false; public void init() { initialized = true; } } <bean id="fu" class="Foo" init-method="init" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  22. Niszczenie Bean public class Foo { private boolean initialized = false; public void dest() { initialized = true; } } <bean id="fu" class="Foo" destroy-method="dest" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  23. Fabryki komponentów (I) • Podstawowa funkcjonalność Spring jest udostępniana przez pakiet org.springframework.beans. Pakiet zawiera infrastrukturę umożliwiającą wyszukiwanie i wiązanie komponentów JavaBean. • BeanFactory to główna fabryka dostarczająca komponentów JavaBean i zarządzająca tworzeniem i wiązaniem komponentów, • ApplicationContext to interfejs rozszerzający BeanFactory o obsługę komunikatów i internacjonalizacji, obsługę zdarzeń i możliwość rejestrowania nasłuchu zdarzeń Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  24. Fabryki komponentów (II) • Spring nie nakłada na klasy POJO żadnych dodatkowych wymagań dotyczących rozszerzanych klas lub implementowanych interfejsów • Dwa tryby tworzenia komponentów: • singleton: fabryka tworzy jedną instancję komponentu JavaBean o podanej nazwie, wszystkie żądania współdzielą jeden komponent, • prototype: w odpowiedzi na każde żądanie fabryka tworzy nową instancję komponentu JavaBean. • Fabryki dostarczają mechanizmu zarządzania cyklem życia komponentu, interfejsy InitializingBean i DisposableBean umożliwiają podejmowanie określonych akcji podczas tworzenia i niszczenia komponentu Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  25. Fabryki komponentów (III) • Sprawdzenie czy bean ma jakieś zależności. Jeśli ma to trzeba je stworzyć lub pobrać ich instancje, jeśli już zostały stworzone wcześniej. • Wywołanie konstruktora lub statycznej metody z fabryki, aby dostać instancję. • Ustawienie wartości pól poprzez setter – zgodnie z definicją w XMLu. • Wywołanie metody inicjalizacyjnej (jeśli ją zdefiniowano). Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  26. Zasięg Bean • Singleton(domyślny) Jedna instancja na kontener • Prototype Każde żądanie tworzy nową instancję • Request • Session • Global Session <bean id="kontroler" class="Foo" scope="singleton" /> <bean id=„dao" class=„Bar" scope="prototype” /> <bean id="stan" class="Session" scope="session" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  27. Leniwa inicjalizacja • Domyślnie Spring inicjuje wszystkie pola w momencie tworzenia obiektu. Można ustawić, żeby bean był inicjowany dopiero w momencie odwołania się do niego. <bean lazy-init=’’true’’ ... /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  28. Przykładowy Bean dla kontrolera (I) <bean id="uzytkownikRekordController" class="controller.security.UzytkownikRekordController"> <property name="uzytkownikService" ref="uzytkownikService" /> <property name="urzadzenieService" ref="urzadzenieService”/> <property name="propertyEditorRegistrar" ref=”uzytkownikPropertyEditorRegistrar"/> <property name="pages"> <list> <value>uzytkownik00Dane</value> <value>uzytkownik01Lokalizacja</value> <value>uzytkownik02Sprzet</value> </list> </property> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  29. Przykładowy Bean dla kontrolera (II) <property name="pageTitles"> <list> <value>Dane uzytkownika</value> <value>Lokalizacja</value> <value>Urzadzenia</value> </list> </property> <property name="validator"> <bean class="validator.UzytkownikValidator"> <property name="maxPasswordLength" value="15"></property> <property name="minPasswordLength" value="8"></property> </bean> </property> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  30. Automatyczne wstrzykiwanie zależności @Autowired @Qualifier("uzytkownikDAO") private UzytkownikDAO uzytkownikDAO; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  31. Deklarowanie obiektów domenowych <bean id="hibernateSessionFactory” ... <property name="packagesToScan"> <list> <value>domain</value> </list> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  32. Automatyczne tworzenie beanów @Repository(”uzytkownikDAO") public class UzytkownikDAOImpl @Service("uzytkownikService") public class UzytkownikServiceImpl @Controller @Scope("session") public class UzytkownikListController <context:component-scan base-package="dao" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

More Related