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

Contenu connexe

Similaire à Dependency Injection Frameworky

Odborná snídaně 20.9. - Agile@DevOps - 2. část
Odborná snídaně 20.9. - Agile@DevOps - 2. částOdborná snídaně 20.9. - Agile@DevOps - 2. část
Odborná snídaně 20.9. - Agile@DevOps - 2. částProfinit
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Jaroslav Prodelal
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022PeckaDesign.cz
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Jaroslav Prodelal
 
View5 technicka 2011
View5 technicka 2011View5 technicka 2011
View5 technicka 2011Vladan Laxa
 
JIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementJIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementOnlio
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Jaroslav Prodelal
 
Vývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléVývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléRené Stein
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnyMarketingArrowECS_CZ
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesCtvrtkoncz
 
2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE SystémůMartin Ptáček
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationdanielkolman
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduMarketingArrowECS_CZ
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniJakub Holy
 
Dependency injection v .Net Frameworku
Dependency injection v .Net FrameworkuDependency injection v .Net Frameworku
Dependency injection v .Net FrameworkuRené Stein
 

Similaire à Dependency Injection Frameworky (20)

Odborná snídaně 20.9. - Agile@DevOps - 2. část
Odborná snídaně 20.9. - Agile@DevOps - 2. částOdborná snídaně 20.9. - Agile@DevOps - 2. část
Odborná snídaně 20.9. - Agile@DevOps - 2. část
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
 
View5 technicka 2011
View5 technicka 2011View5 technicka 2011
View5 technicka 2011
 
JIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementJIRA Zephyr - Test Management
JIRA Zephyr - Test Management
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
 
ASP.NET MVC a TDD
ASP.NET MVC a TDDASP.NET MVC a TDD
ASP.NET MVC a TDD
 
Vývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléVývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročilé
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
 
2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
TNPW2-2011-04
TNPW2-2011-04TNPW2-2011-04
TNPW2-2011-04
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk Testovani
 
Dependency injection v .Net Frameworku
Dependency injection v .Net FrameworkuDependency injection v .Net Frameworku
Dependency injection v .Net Frameworku
 
Mojo BP Obhajoba
Mojo BP ObhajobaMojo BP Obhajoba
Mojo BP Obhajoba
 
TNPW2-2012-02
TNPW2-2012-02TNPW2-2012-02
TNPW2-2012-02
 

Plus de Roman Pichlík

Plus de Roman Pichlík (16)

Cynycal software
Cynycal softwareCynycal software
Cynycal software
 
App Design Architecture
App Design ArchitectureApp Design Architecture
App Design Architecture
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Spring Transactions
Spring TransactionsSpring Transactions
Spring Transactions
 
Spring Testing
Spring TestingSpring Testing
Spring Testing
 
Spring J2EE
Spring J2EESpring J2EE
Spring J2EE
 
Spring ioc-advanced
Spring ioc-advancedSpring ioc-advanced
Spring ioc-advanced
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Spring introduction
Spring introductionSpring introduction
Spring introduction
 
Spring integration
Spring integrationSpring integration
Spring integration
 
Spring dao
Spring daoSpring dao
Spring dao
 
Spring aop
Spring aopSpring aop
Spring aop
 
Spring Web Services
Spring Web ServicesSpring Web Services
Spring Web Services
 
MongoDB for Java Developers
MongoDB for Java DevelopersMongoDB for Java Developers
MongoDB for Java Developers
 
Nosql from java developer pov
Nosql from java developer povNosql from java developer pov
Nosql from java developer pov
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 

Dependency Injection Frameworky

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

Notes de l'éditeur

  1. dfdfdf