Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dependency Injection frameworky v Jave<br />Dagi,<br />Čeven, 2009<br />
3<br />24 June 2009<br />Agenda<br />1. Intro<br />2. Inversionofcontrol<br />3. Co by měl DI framework zvládnout<br />4. ...
Intro<br />
5<br />6/24/2009<br />For internal use only -- not for distribution<br />
Martin Fowler<br />Refactoring<br />Continuousintegration<br />InversionofControl<br />6<br />6/24/2009<br />For internal ...
Timeline<br />7<br />24 June 2009<br />http://www.picocontainer.org/inversion-of-control-history.html<br />
InversionofControl<br />
Programy před zavedením IoC<br />9<br />6/24/2009<br />For internal use only -- not for distribution<br />
Programy po zavedení IoC<br />10<br />24 June 2009<br />
Komponenty a jejich vazby<br />11<br />24 June 2009<br />
12<br />24 June 2009<br />public classReservationService {<br />privateBookServicebookService;<br />public ReservationServ...
KnowYourEnemy<br />13<br />24 June 2009<br />privatevoidinit () {        <br />LocalBookStorelocalBookStore = newLocalBook...
Generalizace problému<br />Kde najít<br />Jak získat<br />Jak zkonfigurovat<br />Jak spojit dohromady<br />14<br />24 June...
Obrácená kontrola<br />„…vychází z principu přenesení odpovědnosti za nalezení, konfiguraci a spojení komponent dohromady ...
Servicelocator<br />16<br />24 June 2009<br />
DependencyInjection<br />17<br />24 June 2009<br />
Servicelocator vs. DI<br />Preferujte DI<br />Žádné těsné vazby<br />Transparentní<br />No singletonhell<br />Servicelocat...
Co by měl DI framework zvládnout<br />
Minimální možná míra invaze<br />Invazivnost<br />Jak moc je ještě komponenta POJO<br />Co je invazivní<br />Implementace ...
Podpora základních typů realizace DI<br />Constructorinjection<br />Bezpečnější, Přehlednější<br />Nepovinné závislosti, C...
Metadata pro popis komponent<br />Anotace<br />Jednoduchý zápis<br />Zapečené na úrovni kódu<br />XML<br />Ukecané<br />Lz...
Jak najít obrázky pro prezentaci<br />23<br />24 June 2009<br />
24<br />24 June 2009<br />
Reference mezi komponentami<br />Typem<br />Bezpečnější (Teoreticky)<br />Jedna instance komponenty<br />Sběr podle typu<b...
Řízení vzniku komponent<br />Uvnitř kontextu<br />Delegace<br />Factory, Fctory metod<br />Mimo kontext<br />Deserializace...
Řízené pořadí vzniku<br />Proč<br />Nepřímé závislosti<br />Zajištění explicitního pořadí inicializace<br />27<br />24 Jun...
Životní cyklus komponent<br />Jedna instance komponenty<br />Singleton<br />Nová instance komponenty<br />Prototyp<br />Ko...
Další<br />Programový přístup ke komponentám<br />Proč<br />Vstupní bod aplikace<br />Kód, který si není vědom obrácené ko...
Srovnání vybraných DI frameworků<br />
Dependencyinjectionframeworky<br />Embeddedframeworky<br />PicoContainer 2.8<br />GoogleGuice 2.0<br />Aplikační framework...
32<br />24 June 2009<br />
Java Contexts and Dependency Injection (JSR-299)<br />WebBeans<br />Myths<br />JSR-299 is just for EJBs<br />JSR-299 is ti...
34<br />24 June 2009<br />
Questions?<br />
Dependency Injection Frameworky
Upcoming SlideShare
Loading in …5
×

Dependency Injection Frameworky

3,384 views

Published on

Prezentace na tema Dependency inejction frameworky v Jave.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Dependency Injection Frameworky

  1. 1.
  2. 2. Dependency Injection frameworky v Jave<br />Dagi,<br />Čeven, 2009<br />
  3. 3. 3<br />24 June 2009<br />Agenda<br />1. Intro<br />2. Inversionofcontrol<br />3. Co by měl DI framework zvládnout<br />4. Srovnání vybraných DI frameworků<br />5. Q&A<br />
  4. 4. Intro<br />
  5. 5. 5<br />6/24/2009<br />For internal use only -- not for distribution<br />
  6. 6. Martin Fowler<br />Refactoring<br />Continuousintegration<br />InversionofControl<br />6<br />6/24/2009<br />For internal use only -- not for distribution<br />
  7. 7. Timeline<br />7<br />24 June 2009<br />http://www.picocontainer.org/inversion-of-control-history.html<br />
  8. 8. InversionofControl<br />
  9. 9. Programy před zavedením IoC<br />9<br />6/24/2009<br />For internal use only -- not for distribution<br />
  10. 10. Programy po zavedení IoC<br />10<br />24 June 2009<br />
  11. 11. Komponenty a jejich vazby<br />11<br />24 June 2009<br />
  12. 12. 12<br />24 June 2009<br />public classReservationService {<br />privateBookServicebookService;<br />public ReservationService() {<br />init();<br /> }<br />privatevoidinit () { <br />LocalBookStorelocalBookStore = newLocalBookStore(); <br />localBookStore.setPath(&quot;/home/johndoe/data.xml&quot;); <br />setBookService(localBookStore);<br /> }<br /> public booleanreserveBook(longbookId, Datefrom,Date to,User u) {<br />Bookbook = bookService.getBook(bookId); <br /> //kod vlastní rezervace vynechan<br /> }<br /> publicvoidsetBookService(BookServicebookService) {this.bookService=bookService; <br /> }<br />}<br />
  13. 13. KnowYourEnemy<br />13<br />24 June 2009<br />privatevoidinit () { <br />LocalBookStorelocalBookStore = newLocalBookStore(); <br />localBookStore.setPath(&quot;/home/johndoe/data.xml&quot;); <br />setBookService(localBookStore);<br />}<br />
  14. 14. Generalizace problému<br />Kde najít<br />Jak získat<br />Jak zkonfigurovat<br />Jak spojit dohromady<br />14<br />24 June 2009<br />
  15. 15. Obrácená kontrola<br />„…vychází z principu přenesení odpovědnosti za nalezení, konfiguraci a spojení komponent dohromady na někoho třetího“<br />Indirekce == volné vazby (looselycoupled)<br />Znovupoužitelnost<br />Lepší testovatelnost<br />Extenzibilita<br />Dvě možné implementace<br />Přímé závislosti na prostředníkovi<br />Nepřímé závislosti na prostředníkovi<br />15<br />24 June 2009<br />
  16. 16. Servicelocator<br />16<br />24 June 2009<br />
  17. 17. DependencyInjection<br />17<br />24 June 2009<br />
  18. 18. Servicelocator vs. DI<br />Preferujte DI<br />Žádné těsné vazby<br />Transparentní<br />No singletonhell<br />Servicelocator<br />body napojení<br />Servlet<br />Controller aplikace<br />18<br />24 June 2009<br />
  19. 19. Co by měl DI framework zvládnout<br />
  20. 20. Minimální možná míra invaze<br />Invazivnost<br />Jak moc je ještě komponenta POJO<br />Co je invazivní<br />Implementace rozhraní<br />Odvození komponenty od specifické třídy frameworku<br />Nemožnost používat základní programové konstrukty<br />finální třídy<br />konstruktory s parametrem<br />Proč<br />Návrhové a implementační kompromisy<br />
  21. 21. Podpora základních typů realizace DI<br />Constructorinjection<br />Bezpečnější, Přehlednější<br />Nepovinné závislosti, Cyklické závislosti (proxy)<br />Setterinjection<br />Nepovinné či velké množství závislostí<br />Chybějící závislosti (@Required)<br />Fieldinjection<br />Jednoduchý zápis<br />Netransparentní<br />Proč<br />Pro různé případy se hodí různé přístupy<br />21<br />24 June 2009<br />
  22. 22. Metadata pro popis komponent<br />Anotace<br />Jednoduchý zápis<br />Zapečené na úrovni kódu<br />XML<br />Ukecané<br />Lze měnít v deploymenttime<br />Konfigurovatelné komponenty (vazba na infrastrukturu)<br />Proč<br />Obvykle oba typy komponent v aplikace<br />22<br />24 June 2009<br />
  23. 23. Jak najít obrázky pro prezentaci<br />23<br />24 June 2009<br />
  24. 24. 24<br />24 June 2009<br />
  25. 25. Reference mezi komponentami<br />Typem<br />Bezpečnější (Teoreticky)<br />Jedna instance komponenty<br />Sběr podle typu<br />Extenzibilita s volnou vazbou<br />Symbolickým jménem<br />Více instancí stejného rozhraní<br />Variabilnější skládání<br />XML<br />Proč<br />Testování (mockobjecty se stejným rozhraním)<br />25<br />24 June 2009<br />
  26. 26. Řízení vzniku komponent<br />Uvnitř kontextu<br />Delegace<br />Factory, Fctory metod<br />Mimo kontext<br />Deserializace komponenty<br />Web či ORM framework<br />Proč<br />Legacy kód, 3rd party knihovny<br />26<br />24 June 2009<br />
  27. 27. Řízené pořadí vzniku<br />Proč<br />Nepřímé závislosti<br />Zajištění explicitního pořadí inicializace<br />27<br />24 June 2009<br />
  28. 28. Životní cyklus komponent<br />Jedna instance komponenty<br />Singleton<br />Nová instance komponenty<br />Prototyp<br />Konverzační instance komponenty<br />HTTP request, HTTP session atd.<br />Proč<br />Implementační detail komponenty<br />Web aplikace<br />28<br />24 June 2009<br />
  29. 29. Další<br />Programový přístup ke komponentám<br />Proč<br />Vstupní bod aplikace<br />Kód, který si není vědom obrácené kontroly<br />Legacy, Integrace s 3party knihovnami<br />Jednoduchá testovatelnost<br />Proč<br />Efektivita vývoje<br />Facebook, Twitter, Freevideo… <br />29<br />24 June 2009<br />
  30. 30. Srovnání vybraných DI frameworků<br />
  31. 31. Dependencyinjectionframeworky<br />Embeddedframeworky<br />PicoContainer 2.8<br />GoogleGuice 2.0<br />Aplikační frameworky<br />JBossMicrocontainer 2.0.6 GA<br />Springframework 2.5.x<br />Standard<br />ApacheOpenEJB 3.0<br />31<br />24 June 2009<br />
  32. 32. 32<br />24 June 2009<br />
  33. 33. Java Contexts and Dependency Injection (JSR-299)<br />WebBeans<br />Myths<br />JSR-299 is just for EJBs<br />JSR-299 is tied to JSF<br />JSR-299 is tied to heavyweight Java EE containers<br />JSR-299 uses a lot of annotations<br />33<br />24 June 2009<br />
  34. 34. 34<br />24 June 2009<br />
  35. 35. Questions?<br />

×