Spring. Krzysztof Ślusarski. 18maja2007. Wydział Matematyki Informatyki i Mechaniki Uniwersytetu Warszawskiego

Podobne dokumenty
Tomasz Dobek.

Podstawy frameworka Spring

mgr inż. Michał Paluch

SPRING FRAMEWORK. dr inż. Jakub Chłapioski

Wprowadzenie. Spring 2.5. Norbert Potocki. 3 lutego Norbert Potocki Spring 2.5

Zaawansowane Aplikacje Internetowe

Tworzenie aplikacji J2EE w oparciu o Spring Framework

METODY PROGRAMOWANIA

Zaawansowane aplikacje internetowe. Architektura Spring. wykład prowadzi Mikołaj Morzy. Architektura Spring

Enterprise JavaBeans

Pico. Wstęp do kontenerów IoC.

Nowoczesne aplikacje internetowe oparte na Spring Framework, JSF, JPA i AJAX

Wielowarstwowe aplikacje internetowe. Spring. Autorzy wykładu: Mikołaj Morzy Marek Wojciechowski. Spring

Spring Framework dla praktyków. Piotr Maj

Serwery aplikacji. dr Radosław Matusik. radmat

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Programowanie komponentowe 5

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Programowanie aspektowe na przykładzie AspectJ JUG Poznań, Jacek Pospychała

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Spring Framework. Profesjonalne tworzenie oprogramowania w Javie

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

PHP 5 język obiektowy

Aplikacje w środowisku Java

Aplikacje internetowe i rozproszone - laboratorium

Wzorce logiki dziedziny

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Tworzenie aplikacji internetowych z wykorzystaniem szkieletu Spring. Paweł Ociepa, Paweł Pierzchała

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Spring framework. Paweł Kędziora. Marek Lewandowski

1 Wprowadzenie do J2EE

EJB 3.0 (Enterprise JavaBeans 3.0)

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Kontenery IoC dla Java Guice 3.0

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zaawansowane Aplikacje Internetowe

Obiekty, aspekty, komponenty

Współbieżność w środowisku Java

Programowanie obiektowe

Kurs WWW. Paweł Rajba.

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Dokumentacja do API Javy.

Metody dostępu do danych

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

JAX-RS czyli REST w Javie. Adam Kędziora

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Java Server Faces narzędzie do implementacji w wy prezentacji

KLASY, INTERFEJSY, ITP

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Zaawansowane aplikacje internetowe

Enkapsulacja, dziedziczenie, polimorfizm

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Kurs programowania aplikacji bazodanowych

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Usługa TimerService

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Modele komponentowe SCA, OSGi, Distributed OSGi i OSGi Enterprise a Java EE

Java: interfejsy i klasy wewnętrzne

SPRING FRAMEWORK. dr inż. Jakub Chłapioski

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Podstawowe informacje o technologii Java Persistence API - przykład

Wzorce dystrybucji i wspólbieżności autonomicznej

Remote Method Invocation 17 listopada 2010

Enterprise Java Beans Narzędzia i Aplikacje Java EE

Aplikacje RMI

Stanowe komponenty sesyjne

Aplikacje biznesowe Wykład dla studentów Informatyki Stosowanej

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Aplikacje RMI Lab4

Podejście obiektowe do budowy systemów rozproszonych

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do relacyjnych baz danych Hibernate.

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wywoływanie metod zdalnych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Google Web Toolkit Michał Węgorek ZPO 2009

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Zaawansowane Aplikacje Internetowe

Scala - programowanie obiektowo-funkcyjne

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe

Programowanie obiektowe

Zastosowanie komponentów EJB typu Session

Programowanie Obiektowe Ćwiczenie 4

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Modelowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Programowanie wielowarstwowe i komponentowe JSP, JSF

Transkrypt:

Spring Krzysztof Ślusarski Wydział Matematyki Informatyki i Mechaniki Uniwersytetu Warszawskiego 18maja2007

Zalety Komponenty Nie narzuca nam określonego modelu programowania(jak np. EJB); Jest lekki, nie potrzebny jest serwer aplikacji; Łatwosć testowania; Łatwość wstawiania mocków; Łatwość rozbudowy; Możliwość zmiany implementacji poszczególnych komponetów (np. DAO) bez ingerencji w inne komponenty; Klasy dające łatwą możliwość integracji z innymi technologiami(hibernate, JDBC, JPA...); B. dobra dokumentacja; Duża społeczność używająca Springa; Pozwala programiście skupić się na implementacji tego co naprawde ważne;

Komponenty Komponenty 1 Core- zawiera implementację kontenera IoC i Dependency Incection. Najważniejszy jest tu interfejs BeanFactory. 2 DAO- zawiera narzędzia pomocne przy tworzeniu DAO za pomocą JDBC(np. nie trzeba parsowac błędów). Zawiera także mechanizm zarządzania transakcjami. 3 ORM- zawiera narzędzia pomocne przy tworzeniu DAO za pomocą popularnych ORM(np. Hibernate, JPA, JDO, Toplink,...). 4 AOP- zawiera narzędzia dla programowania aspektowego. 5 JEE- zawiera narzędzia pomocne przy integrowaniu aplikacji z Java Enterprise Edition(JMS, JMX, EJB, Mail,...). 6 Web- zawiera narzędzia pomocne przy tworzeniu serwisów WWW(w tym kontroler MVC).

Podstawy Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Podstawowym bytem w Springu są beany, które żyją wewnątrz kontenera IoC. Beanem w sensie springowym może być każda klasa zgodna ze specyfikacja JavaBean. Beany nie muszą implementowć żadnego interfejsu, ani rozszerzać żadnej klasy. Przykładowy bean:

Podstawy... Podstawy Atrybuty beanów Pobieranie Singleton Konwencje public class Bean{ private String name; public void setname(string name){ this.name = name; } } public String getname(){ return name; }

Podstawy... Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Beany można deklarować na klika sposobów, my zajmiemy się tylko deklarowaniem ich w XML-u. Dla nie lubiących XML-a są propertiesy.

Podstawy... Podstawy Atrybuty beanów Pobieranie Singleton Konwencje <beans> <import resource= context-dao.xml /> <import resource= context-common.xml /> <beanid=... class=... /> <beanid=... class=... /> </beans>

Atrybuty beanów Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Najważniejsze atrybuty beanów 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łuwana przy niszczeniu beana

Pobieranie beanów Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Pobieranie beanów: fabryka beanów kontekst aplikacji Resource resource = new ClassPathResource( beans.xml ); BeanFactory beanfactory = new XmlBeanFactory(resource); ApplicationContext applicationcontext = new ClassPathXmlApplicationContext( beans.xml );

Metody fabryki beanów Podstawy Atrybuty beanów Pobieranie Singleton Konwencje boolean containsbean(string); Object getbean(string); Object getbean(string, Class); Class gettype(string); boolean issingleton(string); String[] getaliases(string);

Singleton Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Szczególną uwagę należy zachować przy ustawianiu atrybutu singleton. Domyślnie jest to wartość true, co oznacza, że w aplikacji będzie istnieć 1 kopia klasy(chyba, że sami utworzymy drugązapomocąnew).jeżelizmienimywartośćtąnatruetopo utworzeniu beana i przekazaniu jego referencji spring framework zapomina o nim.

Konwencje nazwenictwa Podstawy Atrybuty beanów Pobieranie Singleton Konwencje Stosuje się standardowe nazewnictwo dla Javy + JavaBeans. Nazwy beanów springowych powinny być nazwą klasy/interfejsu z pierwszą literą/wyrazem pisanym małymi literami. Aliasy Można stworzyć alias: <alias name= fromname alias= toname />

Konwencje pisania kodu Podstawy Atrybuty beanów Pobieranie Singleton Konwencje publicinterfacedao{...} public class MockDaoImpl implements Dao{...} public class DaoImpl implements Dao{...} public class Clazz{ private Dao dao; public setdao(dao dao){ this.dao = dao; } } <bean id= dao class= MockDaoImpl /> <bean id= clazz class= Clazz > <property name= dao ref= dao /> </bean>

Inicjacja Inicjacja DI Inne Kontekst aplikacji 1 Przy pomocy konstruktora: <beanclass=... id=... /> 2 Przy pomocy statycznej metody: <beanclass=... id=... factory-method=... /> 3 Przy pomocy statycznej metody z innego beana: <beanclass=... id=... factory-method=... factory-bean=... />

Dependency Injection Inicjacja DI Inne Kontekst aplikacji 1 Przy pomocy settera: private Clazz clazz; public setclazz(clazz clazz){ this.clazz = clazz; } 2 Przy pomocy konstruktora: private Clazz clazz; public ActClazz(Clazz clazz){ this.clazz = clazz; }

Settery Inicjacja DI Inne Kontekst aplikacji <beanid= clazz.../> <beanid=... class=... > <property name= address value= www.wp.pl /> <property name= port > <value>102</value> </property> <property name= clazz ref= clazz /> <property name= clazz-2 > <refbean= clazz /> </property> <property name= clazz-3 > <ref local= clazz /> </property> </bean>

Konstruktory Inicjacja DI Inne Kontekst aplikacji <beanid=... class=... > <constructor-arg index= 0 value= 102 /> <constructor-arg index= 1 ref= clazz />... </bean>

Inicjacja DI Inne Kontekst aplikacji Co można przekazać jako property <idrefbean=... /> <null/> <list/> <set/> <map/> <props/> Kolekcje i propertiesy można ze sobą merge-ować.

ListyiSety Inicjacja DI Inne Kontekst aplikacji <list> <value>test</value> <refbean=... /> </list> <set> <value>test</value> <refbean=... /> </set>

Mapy Inicjacja DI Inne Kontekst aplikacji <map> <entry> <key> <value>name</value> </key> <value>val</value> </entry> <entry> <key><value>name-2</value></key> <refbean= clazz /> </entry> <entry key= name-3 value= 1 /> </map>

Propertiesy Inicjacja DI Inne Kontekst aplikacji <props> <prop key= key-1 >value</prop> <prop key= key-2 >value</prop> </props>

Leniwa inicjacja Inicjacja DI Inne Kontekst aplikacji Domyślnie Spring inicjuje wszystkie singletony i injectuje wszystkie propertiesy. Można ustawić, żeby bean był inicjowany dopiero w momencie odwołania się do niego. <beanlazy-init= true.../> Wówczas część błędów nie może zostać wykryta w czasie uruchamiania aplikacji. <beans default-lazy-init= true >... </beans>

Autowire Inicjacja DI Inne Kontekst aplikacji Możemy sprawić żeby kotener IoC sam injectował zależności. <beanautowire=... /> no brak automatycznego injectowania; byname injectowane są beany, dla których znajduje się setter o odpowiedniej nazwie; bytype injectowane są beany, dla których znajduje się setter odpowiedniego typu; constructor analogicznie do bytype ale dla konstruktora; autodetect kontener sam wybiera albo bytype albo constructor;

Autowire... Inicjacja DI Inne Kontekst aplikacji <beansdefault-autowire=... >... </beans> Można wymusić, żeby bean nie był kandydatem do autoinjectowania. <bean autowire-candidate= false.../>

Gdy chcemy sami pobrać beana Inicjacja DI Inne Kontekst aplikacji Istnieje interfejs BeanFactoryAware. Jeżeli jakikolwiek bean implementuje ten interfejs, to ma dostęp do fabryki beanów, która go stworzyła. Interfejs zawieta jedną metodę: setbeanfactory(beanfactory).

Zasięgi beanów Inicjacja DI Inne Kontekst aplikacji <beanscope=....../> Możliwe zasięgi dla beanów: 1 Singleton; 2 Prototype; 3 Request; 4 Session; 5 Global session;

Internacjonalizacja Inicjacja DI Inne Kontekst aplikacji Interfejs MessageSources, który jest składnikiem kontekstu aplikacji zawiera metody: String getmessage(string, Object[], String, Locale); String getmessage(string, Object[], Locale); String getmessage(messagesourceresolvable, Locale);

Pliki dla Locale Inicjacja DI Inne Kontekst aplikacji <bean id= messagesource class= org.springframework. context.support.resourcebundlemessagesource > <property name= basenames > <list> <value>format</value> <value>dao</value> </list> </property> </bean> Wczytane pliki: format.properties dao.properties

Inicjacja DI Inne Kontekst aplikacji Co jeszcze zawiera kontekst aplikacji Kontekst aplikacji zawiera dodatkowo: Obsługę eventów; Obsługę w aplikacjach webowych;

Wprowadzenie Wprowadzenie Aspect Pointcut Advice Istnieją dwa style pisania aspectów w Springu: 1 anotacje; 2 XML; Pisanie przy pomocy anotacji możliwe jest od wersji 2.0 i tym sposobem się zajmiemy.

Wprowadzenie... Wprowadzenie Aspect Pointcut Advice Aspekty deklatowane przy pomocy anotacji@ascpect; Join point w Springowym AOP zawsze reprezentuje wywołanie metody; Pointcut zbiór join pointów; Advice kiedy akcja ma być wykonana: Before advice; After returning advice; After throwing advice; After(finally) advice; Around advice;

Aspect Wprowadzenie Aspect Pointcut Advice Najprostszy aspekt: @Aspect public class MyAspect{ } <bean id= myaspect class= MyAspect />

Pointcut Wprowadzenie Aspect Pointcut Advice @Pointcut( execution(*transfer(..)) ) public void firstpointcut(){} @Pointcut( within(com.blablabla.package..*) ) public void secondpointcut(){} @Pointcut( execution(*com.dao.*.*(..)) ) public void daopointcut(){}

Pointcut... Wprowadzenie Aspect Pointcut Advice @Pointcut( target(com.interfaces.someinterface) ) public void interfacepointcut(){} @Pointcut( @target(com.annotations.someannotation) ) public void annotationpointcut(){} @Pointcut( @annotation(com.annotations.someannotation) ) public void methodannotationpointcut(){}

Pointcut... Wprowadzenie Aspect Pointcut Advice @Pointcut( args(java.io.serializable) ) public void serializableargsument() @Pointcut( @args(com.annotations.someannotation) ) public void argumentwithannotation() Dodatkowo można łączyć pointcuty przy pomocy!,&&,.

Before advice Wprowadzenie Aspect Pointcut Advice @Before( daopointcut() ) public accesscheck(){... } @Before( daopointcut()&&args(account,..) ) public accesscheck(account account){... }

After returning advice Wprowadzenie Aspect Pointcut Advice @AfterReturning( daopointcut() ) public void dosomething(){... } @AfterReturning(pointcut= daopointcut() returning= retval ) public void dosomething(object retval){... }

After throwing advice Wprowadzenie Aspect Pointcut Advice @AfterThrowing( daopointcut() ) public void exceptionfound(){... } @AfterThrowing(pointcut= daopointcut() throwing= ex ) public void exceptionfound(exception ex){... }

Wprowadzenie Aspect Pointcut Advice After(finnaly) advice, around advice @After( daopointcut() ) public void releaselock(){... } @Around( daopointcut() ) public Object dosomething(proceedingjoinpoint pjp) throws Throwable{ Object retval = pjp.proceed(); return retval; }

Komentarz Wprowadzenie Aspect Pointcut Advice AOP Springowe daje nam sporo podstawowej funkcjonalności. Jeżeli jest ona niewystarczająca, należy użyć np. AspectJ.

Literatura Literatura http://www.springframework.org/ Professional Java Development with the Spring Framework