Spring - PowerPoint PPT Presentation

About This Presentation
Title:

Spring

Description:

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 ... – PowerPoint PPT presentation

Number of Views:67
Avg rating:3.0/5.0
Slides: 33
Provided by: neoDmcsP
Category:

less

Transcript and Presenter's Notes

Title: Spring


1
  • Spring
  • podstawy

2
Plan wykladu
  • Co to jest Spring?
  • JavaBeen i wstrzykiwanie zaleznosci

3
Historia Spring
  • J2EE jest zbyt skomplikowane,
  • encyjne EJB sa przestarzale, zlozone, naduzywane
    i prawie zbedne,
  • lepiej wykorzystywac interfejsy niz
    dziedziczenie,
  • komponenty JavaBean doskonale sie nadaja do
    tworzenia aplikacji,
  • paradygmat obiektowy jest wazniejszy niz
    implementacja,
  • obslugiwane wyjatki sa naduzywane w aplikacjach
    Java,
  • kluczowa role pelni mozliwosc niezaleznego
    testowania poszczególnych modulów.

4
Co to jest Spring
  • Wielowarstwowy szkielet aplikacji Java/J2EE
    zawierajacy
  • lekki kontener umozliwiajacy scentralizowane
    zarzadzanie i laczenie komponentów JavaBean i
    POJO,
  • warstwe zarzadzania transakcjami,
  • warstwe obslugi JDBC,
  • moduly umozliwiajace integracje z Toplink,
    Hibernate, JDO i iBATIS za pomoca standardowych
    DAO,
  • pelnowartosciowe srodowisko obslugujace
    paradygmat programowania aspektowego AOP,
  • elastyczne srodowisko do tworzenia aplikacji
    internetowych zgodnie z modelem MVC umozliwiajace
    integracje ze Struts, WebWork,Tapestry

5
Architektura Spring (I)
  • Spring jest uzupelnieniem serwerów aplikacji
  • caly szkielet tworzony z perspektywy aplikacji a
    nie serwera
  • Pelna modulowosc szkieletu
  • mozna wykorzystac dowolna czesc Spring
    niezaleznie od pozostalych
  • Wysoka konfigurowalnosc projektów
  • Nie uzalezniamy kodu aplikacji od naszego API

6
Architektura Spring (II)
7
Skladniki Spring (I)
  • Kontener
  • podstawowa czesc architektury, glównym
    skladnikiem jest BeanFactory zapewniajaca
    mechanizm IoC (Inversion of Control)
  • Spring context
  • plik konfiguracyjny dostarczajacy opis
    srodowiska JNDI, EJB, wielojezycznosc,
    walidacja, itp.
  • SpringAOP
  • modul implementujacy mechanizm AOP
    (Aspect-Oriented Programming) i zapewniajacy
    transakcyjnosc przetwarzania

8
Skladniki Spring (II)
  • SpringDAO
  • hierarchia wyjatków ujednolicajaca kody bledów
    róznych baz danych
  • Spring ORM
  • szablony ulatwiajace korzystanie z narzedzi ORM
  • Spring Web module
  • integracja z Jakarta Struts i dostarczanie
    kontekstu aplikacjom webowym
  • SpringMVC framework
  • implementacja MVC obslugujaca szeroka game
    technologii

9
Podstawowe zalozenia
  • Uzywamy POJO (plain old java object)
  • Framework dostarcza kontener dla obiektów
  • Framework zarzadza tworzeniem obiektów
  • Wiekszosc naszego kodu "nie wie" o istnieniu
    kontenera
  • Duza elastycznosc i konfigurowalnosc (silny XML!)
  • Integracja i unifikacja dostepu do zewnetrznych
    zasobów i technologii (np. Baz danych)
  • Projektowanie i programowanie przez interfejsy

10
Spring Bean
  • Wszystko jest beanem!
  • Beany to dowolne obiekty zarzadzane przez
    kontener Springa.
  • Beany nie musza implementowac zadnego interfejsu,
    ani rozszerzac zadnej klasy
  • Beany zazwyczaj produkowane sa przez fabryke
    Springa.
  • Beany definiujemy w kontekscie aplikacji za
    pomoca XML lub properties, kodu Javy lub innych
    metod.

11
Deklaracja Bean
  • Kazdy bean ma unikalny identyfikator i klase.
  • Ponizsza deklaracja XML definiuje najprostszy
    bean
  • ltbean id"prostyBean" class"spring.Bean" /gt

12
Atrybuty Bean
  • Najwazniejsze 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 wywolywana przy inicjacji
  • lazy-init - czy inicjacja ma byc leniwa
  • destroy-method - metoda wywolywana przy
    niszczeniu beana

13
Wstrzykiwanie zaleznosci
  • Uzytkownik nie tworzy i nie laczy obiektów w
    aplikacji, lecz opisuje zaleznosci miedzy
    poszczególnymi klasami. Kontener jest w pelni
    odpowiedzialny za tworzenie obiektów i ich
    laczenie
  • Metody implementacji wzorca IoC
  • obiekty implementuja specjalny interfejs do
    wyszukiwania obiektów zaleznych
  • zaleznosci sa ustawiane w obiektach przez metody
    setter
  • zaleznosci sa ustawiane w obiektach przez
    konstruktor

14
Wstrzykiwanie zaleznosci 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

15
Wstrzykiwanie zaleznosci przez settery (II)
  • ltbean id" przykladowyBean" classprzyklady.
    PrzykladowyBean"gt
  • ltproperty name"beanOne ref beanfirstBean"/gt
  • lt/propertygt
  • ltproperty name"beanTwo" refsecondBean"/gt
  • ltproperty name"integerProperty" value"1"/gt
  • lt/beangt
  • ltbean idfirstBean" classprzyklady.FirstBean"/gt
  • ltbean idsecondBean" classprzyklady.SecondBean"
    /gt

16
Wstrzykiwanie zaleznosci 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

17
Wstrzykiwanie zaleznosci przez konstruktor (II)
  • ltbean idprzykladowyBean" classprzyklady.Przykl
    adowyBean"gt
  • ltconstructor-arggt
  • ltref beanfirstBean"/gt
  • lt/constructor-arggt
  • ltconstructor-arg refsecondBean"/gt
  • ltconstructor-arg type"int" value"1"/gt
  • lt/beangt
  • ltbean idfirstBean" classprzyklady.FirstBean"/gt
  • ltbean idsecondBean" classprzyklady.SecondBean"
    /gt

18
Inicjalizacja Bean
  • ltbean id"msg" class"spring.msg"gt
  • ltproperty name"message" value"Hello" /gt
  • ltproperty name"names"gt
  • ltlistgt
  • ltvaluegtMareklt/valuegt
  • ltvaluegtAnnalt/valuegt
  • ltvaluegtJanlt/valuegt
  • ltvaluegtEwalt/valuegt
  • lt/listgt
  • lt/propertygt
  • ltproperty name"number" value"13" /gt
  • lt/beangt

19
Inicjalizacja Bean - przyklad (I)
  • class Pokoj
  • String nazwa
  • String lokalizacja
  • ....
  • class Uzytkownik
  • String imie
  • Pokoj pokoj
  • ....

20
Inicjalizacja Bean - przyklad (II)
  • ltbeansgt
  • ltbean iduzytkownikBean" class"spring.Uzytkownik
    "gt
  • ltproperty nameimie" value"Marek"/gt
  • ltproperty namepokoj ref beanpokojBean"/gt
  • lt/propertygt
  • lt/beangt
  • ltbean idpokojBean" class"spring.Pokoj" gt
  • ltproperty namenazwa" value27C"/gt
  • ltproperty namelokalizacja" valueB2"/gt
  • lt/beangt
  • lt/beansgt

21
Metoda inicjalizacyjna
  • Istnieje mozliwosc wskazani wlasnych metod do
    inicjalizacji oraz destrukcji beana.
  • public class Foo
  • private boolean initialized false
  • public void init()
  • initialized true
  • ltbean id"fu" class"Foo" init-method"init" /gt

22
Niszczenie Bean
  • public class Foo
  • private boolean initialized false
  • public void dest()
  • initialized true
  • ltbean id"fu" class"Foo" destroy-method"dest"
    /gt

23
Fabryki komponentów (I)
  • Podstawowa funkcjonalnosc Spring jest
    udostepniana przez pakiet org.springframework.bean
    s. Pakiet zawiera infrastrukture umozliwiajaca
    wyszukiwanie i wiazanie komponentów JavaBean.
  • BeanFactory to glówna fabryka dostarczajaca
    komponentów JavaBean i zarzadzajaca tworzeniem i
    wiazaniem komponentów,
  • ApplicationContext to interfejs rozszerzajacy
    BeanFactory o obsluge komunikatów i
    internacjonalizacji, obsluge zdarzen i mozliwosc
    rejestrowania nasluchu zdarzen

24
Fabryki komponentów (II)
  • Spring nie naklada na klasy POJO zadnych
    dodatkowych wymagan dotyczacych rozszerzanych
    klas lub implementowanych interfejsów
  • Dwa tryby tworzenia komponentów
  • singleton fabryka tworzy jedna instancje
    komponentu JavaBean o podanej nazwie, wszystkie
    zadania wspóldziela jeden komponent,
  • prototype w odpowiedzi na kazde zadanie fabryka
    tworzy nowa instancje komponentu JavaBean.
  • Fabryki dostarczaja mechanizmu zarzadzania cyklem
    zycia komponentu, interfejsy InitializingBean i
    DisposableBean umozliwiaja podejmowanie
    okreslonych akcji podczas tworzenia i niszczenia
    komponentu

25
Fabryki komponentów (III)
  • Sprawdzenie czy bean ma jakies zaleznosci. Jesli
    ma to trzeba je stworzyc lub pobrac ich
    instancje, jesli juz zostaly stworzone wczesniej.
  • Wywolanie konstruktora lub statycznej metody z
    fabryki, aby dostac instancje.
  • Ustawienie wartosci pól poprzez setter zgodnie
    z definicja w XMLu.
  • Wywolanie metody inicjalizacyjnej (jesli ja
    zdefiniowano).

26
Zasieg Bean
  • Singleton(domyslny)
  • Jedna instancja na kontener
  • Prototype
  • Kazde zadanie tworzy nowa instancje
  • Request
  • Session
  • Global Session
  • ltbean id"kontroler" class"Foo"
    scope"singleton" /gt
  • ltbean iddao" classBar" scope"prototype /gt
  • ltbean id"stan" class"Session" scope"session" /gt

27
Leniwa inicjalizacja
  • Domyslnie Spring inicjuje wszystkie pola w
    momencie tworzenia obiektu. Mozna ustawic, zeby
    bean byl inicjowany dopiero w momencie odwolania
    sie do niego.
  • ltbean lazy-inittrue ... /gt

28
Przykladowy Bean dla kontrolera (I)
  • ltbean id"uzytkownikRekordController"
    class"controller.security.UzytkownikRekordControl
    ler"gt
  • ltproperty name"uzytkownikService"
    ref"uzytkownikService" /gt
  • ltproperty name"urzadzenieService"
    ref"urzadzenieService/gt
  • ltproperty name"propertyEditorRegistrar"
    refuzytkownikPropertyEditorRegistrar"/gt
  • ltproperty name"pages"gt
  • ltlistgt
  • ltvaluegtuzytkownik00Danelt/valuegt
  • ltvaluegtuzytkownik01Lokalizacjalt/valuegt
  • ltvaluegtuzytkownik02Sprzetlt/valuegt
  • lt/listgt
  • lt/propertygt

29
Przykladowy Bean dla kontrolera (II)
  • ltproperty name"pageTitles"gt
  • ltlistgt
  • ltvaluegtDane uzytkownikalt/valuegt
  • ltvaluegtLokalizacjalt/valuegt
  • ltvaluegtUrzadzenialt/valuegt
  • lt/listgt
  • lt/propertygt
  • ltproperty name"validator"gt
  • ltbean class"validator.UzytkownikValidator"gt
  • ltproperty name"maxPasswordLength"
    value"15"gtlt/propertygt
  • ltproperty name"minPasswordLength"
    value"8"gtlt/propertygt
  • lt/beangt
  • lt/propertygt

30
Automatyczne wstrzykiwanie zaleznosci
  • _at_Autowired
  • _at_Qualifier("uzytkownikDAO")
  • private UzytkownikDAO uzytkownikDAO

31
Deklarowanie obiektów domenowych
  • ltbean id"hibernateSessionFactory ...
  • ltproperty name"packagesToScan"gt
  • ltlistgt
  • ltvaluegtdomainlt/valuegt
  • lt/listgt
  • lt/propertygt
  • lt/beangt

32
Automatyczne tworzenie beanów
  • _at_Repository(uzytkownikDAO")
  • public class UzytkownikDAOImpl
  • _at_Service("uzytkownikService")
  • public class UzytkownikServiceImpl
  • _at_Controller
  • _at_Scope("session")
  • public class UzytkownikListController
  • ltcontextcomponent-scan base-package"dao" /gt
Write a Comment
User Comments (0)
About PowerShow.com