Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Spring Framework Tomasz Dobek

Podobne prezentacje


Prezentacja na temat: "Spring Framework Tomasz Dobek"— Zapis prezentacji:

1 Spring Framework Tomasz Dobek t.dobek@students.mimuw.edu.pl

2 Plan prezentacji  Spring z lotu ptaka  Kontener Spring IoC  Spring AOP  Menedżer transakcji w Springu  Spring DAO  Testy integracyjne  Podsumowanie

3 Spring  Lekki kontener do budowy aplikacji  Nie opisuje go żadna specyfikacja  Najnowsza wersja 2.0  Istnieje też równoległy projekt Spring Webflow  Spring powstał jako alternatywa dla EJB 2.1

4 Motywacja projektu Spring  Wymuszamy dobry styl programowania  Nie uzależniamy kodu aplikacji od naszego API  Wspieramy testowanie modułów (unit-testing) poza kontenerem  Wysoka konfigurowalność projektów  Architekt może skroić Springa do swoich potrzeb

5 Składniki Spring  Kontener IoC  AOP  DAO (JDBC, Hibernate, JPA, Toplink... )  Transakcje  Framework MVC

6 Spring z lotu ptaka

7 Spring IoC

8 Kontener IoC  Inversion of Control  Zależności pomiędzy obiektami nie znajdują się w kodzie klas tych obiektów.  Zależnościami zarządza kod zewnętrzny z punktu widzenia aplikacji (tu: kontenera).  Wymusza to od nas myślenie interfejsami.  Do realizacji tej techniki Spring używa Dependency Injection i Dependency Lookup

9 Przykład – DI przez settery Public class BlaImpl implements BlaIntf { private int intVal; Public void setIntVal(int value) { this.intVal = value; }

10 DI przez konstruktor Public class BlaImpl2 implements BlaIntf { private int intVal; public BlaImpl2(int val) { this.intVal = val;...

11 DI przez fabrykę <bean id=„factoryBean” class=„...”... <bean id=„instanceBean” class=„...” factory-bean=„factoryBean” factory-method=„createInstance”>...

12 Zależności od Beanów...

13 Dependency lookup  Możemy sami poprosić kontener w naszym kodzie o Beana  Interfejsy kontenera:  BeanFactory  ApplicationContext  WebApplicationContext

14 DL - przykład Public static void main(String[] args) { InputStream is = new FileInputStream("beans.xml"); BeanFactory factory = new XmlBeanFactory(is); }

15 Zasięg Beanów  Singleton (domyślny)  Jedna instancja na kontener  Prototype  Każde żądanie tworzy nową instancję  Request  Session  Global Session

16 Przykład - Eclipse  Pobierz szkielet projektów do Eclipse’a  /home/tmp/td209515/spring-workspace.tar.gz  Rozpakuj i uruchom Eclipse'a wskazując rozpakowany katalog jako workspace  Stwórz implementację interfejsu  Stwórz plik konfiguracyjny  Uruchom Main.java

17 Zaawansowane możliwości  Leniwe ładowanie beanów  Definiowanie własnych zakresów  Definiowanie własnych znaczników w pliku konfiguracyjnym  ApplicationContext  Lokalizacje  Sterowanie beanów zdarzeniami  Auto-wiring

18 Spring AOP Framework

19 Spring AOP wprowadzenie  Własny framework AOP  Używa czystej Javy  Ograniczona funkcjonalność  Na Spring AOP zbudowana jest większość funkcjonalności Springa  Spring AOP nie jest konkurencją dla np. AspectJ

20 AOP - przypomnienie  Aspect  Join point  Advice  Before advice  After (returning/throwing/finally) advice  Around advice  Pointcut

21 Konfiguracja Spring AOP  Aspekty traktowane są na równych prawach z innymi beanami.  Sposoby konfiguracji:  Adnotacje @AspectJ  Konfiguracja w pliku XML z innymi Beanami

22 Konfiguracja - adnotacje @Aspect Public class BeforeExample { @Before(„com.xyz.myapp.Bla.operation()”) public void doAccessCheck() {... } } // przy metodzie Bla.operation() definiujemy @Pointcut...

23 Konfiguracja - XML <aop:pointcut id=„businessService” expression=„execution(* com.xyz.myapp.service.*.* (..))”/> <aop:before pointcut-ref=„businessService” method=„doAccessCheck”/>...

24 Realizacja Spring AOP  Obiekt AOP Proxy pośredniczy w wywołaniach metod naszego obiektu  Jeśli występuje join point wywoływany jest w odpowiedni sposób kod aspektu

25 Przykład  Do poprzedniego przykładu dodaj do interfejsu 1 metodę  Napisz implementację drukującą coś na konsoli  Zdefiniuj aspekt pointcut i advice uruchamiający tą metodę przy wywołaniu dowolnej metody  Zobacz efekt

26 Zarządca transakcji w Springu

27 Transakcje w Springu  Te same poziomy ISOLATION co w JTA  Te same wartości PROPAGATION co w JTA  Lepsze zarządzanie wyjątkami niż w JTA  Wspiera JDBC, Hibernate, JPA, JDO  Deklaratywnie i/lub programistycznie  Brak zależności od serwera aplikacji

28 Używanie transakcji  Interfejs PlatformTransactionManager public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException; }

29 Używanie transakcji (2)  Interfejs TransactionDefinition  Isolation (domyślnie: DEFAULT)  Propagation (domyślnie: REQUIRED)  Timeout  Read-only  Oczywiście wszystko konfigurujemy jako Beany z użyciem AOP

30 Transakcje - konfiguracja

31 Konfiguracja (c.d.)...

32 Konfiguracja - adnotacje @Transactional public class DefaultFooService implements FooService { Foo getFoo(String fooName); Foo getFoo(String fooName, String barName); void insertFoo(Foo foo); void updateFoo(Foo foo); }

33 Realizacja transakcji  Do realizacji użyto oczywiście IoC i AOP

34 Transakcje - ciekawostki  Atrybut „rollback-for”  Atrybut „no-rollback-for”  Transakcje programistyczne:  Korzystamy z klasy TransactionTemplate  Podajemy co chcemy zrobić w transakcji i o nic się nie martwimy return transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { updateOperation1(); return resultOfUpdateOperation2(); } });

35 Spring DAO

36  Integracja wielu technologii do łączenia się z warstwą danych:  JDBC, Hibernate, Toplink, JDO, JPA, iBATIS SQL Maps  Zunifikowany zestaw wyjątków  Wiele użytecznych klas  Wykonywanie najczęstszych czynności  Wplatanie wywołań API danej technologii

37 Nowa hierarchia wyjątków

38 Przykład - Hibernate  Mamy przykładowy mapping Hibernate  Definiujemy interfejs dostępu do danych  Implementujemy go używając jednej z technologi (tu: Hibernate)  Konfigurujemy beany.  Uruchamiamy testy.  Jeśli zmienimy technologie, zmieniamy konfigurację i implementacje interfejsu

39 Konfiguracja źródła danych product.hbm.xml hibernate.dialect=org.hibernate.dialect.HSQLDialect

40 Klasa HibernateTemplate  Klasa opakowująca wywołania wewnątrz API Hibernate  Umożliwia wykonywanie poleceń w Hibernate API przez callbacki.  Inicjujemy ją w naszej implementacji DAO przez Dependency Injection

41 Konfiguracja Beanów public class ProductDaoImpl implements ProductDao { private HibernateTemplate hibernateTemplate; public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public Collection loadProductsByCategory(String category) throws DataAccessException { return this.hibernateTemplate.find("from test.Product product where product.category=?", category); }

42 Testowanie aplikacji

43 Testowanie  Spring Framework wspiera TDD  Pisanie testów modułów jest proste (obiekty POJO) – może być poza kontenerem  Spring ułatwia pisanie testów integracyjnych.

44 Interfejsy do pisania testów  AbstractDependencyInjectionSpringContextTests  AbstractTransactionalDataSourceSpringContextTests

45 Wsparcie dla testów integracyjnych  Cache’owanie kontenera IoC  AbstractDependencyInjectionSpringContextTests ::getConfigLocations()  AbstractDependencyInjectionSpringContextTests ::getConfigLocations()  Wykorzystanie „auto-wiring by type” do konfigurowania beanów testowych  Zawieranie testów w transakcjach i wycofywanie ich pod koniec testu

46 Pisanie beanów testujących  Wystarczy napisać settery do pól  Nie przeładujemy kontenera chyba że wywołamy setDirty()  Transakcje: możemy zatwierdzić wołając setComplete()  Mamy też dostęp do źródła danych przez JdbcTemplate  Mamy za darmo dostęp do applicationContext

47 Testy integracyjne - przykład  Mamy aplikację z dostępem do bazy danych  Chcemy sprawdzić testami poprawność konfiguracji (Hibernate, beany, obiekty DAO)

48 Kolejne ułatwienia - adnotacje  @DirtiesContext  @ExpectedException(SomeException.class)  @NotTransactional  @Repeat(np. 10)  Takie testy wymagają dziedziczenia z AbstractAnnotationAwareTransactionalTests !!!

49 Testy integracyjne - przykład public final class HibernateTitleDaoTests extends AbstractDependencyInjectionSpringContextTests { private HibernateTitleDao titleDao; public void setTitleDao(HibernateTitleDao titleDao) { this.titleDao = titleDao; } public void testLoadTitle() throws Exception { Title title = this.titleDao.loadTitle(new Long(10)); assertNotNull(title); } protected String[] getConfigLocations() { return new String[] { "classpath:com/foo/daos.xml" }; } }

50 Przykład c.d. - konfiguracja...

51 Ciekawostki – wersja 2.0  Obsługa języków dynamicznych  JRuby, Groovy, BeanShell  Portlet MVC  Pełne wsparcie dla JMS.  Biblioteka tagów JSP.  Uproszczona konfiguracja w XML

52 Podsumowanie  Spring ułatwia budowanie aplikacji opartej na wielu technologiach.  Spring wspiera tworzenie dobrze zaprojektowanych aplikacji.  Spring nie jest inwazyjny (kod).  Spring wspiera TDD.  Spring jest lekki.

53 Spring, a EJB3  EJB3 rozwiązał wiele problemów, które wcześniej były rozwiązane w Springu  Czy Spring jest nadal potrzebny ?

54 Pytania  Jeśli starczy czasu  Jeśli starczy czasu  Bądź na maila :  t.dobek@students.mimuw.edu.pl


Pobierz ppt "Spring Framework Tomasz Dobek"

Podobne prezentacje


Reklamy Google