dependency injection frameworky
DESCRIPTION
Prezentace na tema Dependency inejction frameworky v Jave.TRANSCRIPT
![Page 1: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/1.jpg)
![Page 2: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/2.jpg)
© 2008 Hewlett-Packard Development Company, L.P.The information contained herein is subject to change without notice
Dependency Injection frameworky v Jave
Dagi, Čeven, 2009
![Page 3: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/3.jpg)
3 April 12, 2023
Agenda
1. Intro
3. Co by měl DI framework zvládnout
2. Inversion of control
4. Srovnání vybraných DI frameworků
5. Q&A
![Page 4: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/4.jpg)
Intro
![Page 5: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/5.jpg)
5 04/12/2023 For internal use only -- not for distribution
![Page 6: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/6.jpg)
Martin Fowler• Refactoring• Continuous integration• Inversion of Control
6 04/12/2023 For internal use only -- not for distribution
![Page 7: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/7.jpg)
Timeline
7 April 12, 2023
http://www.picocontainer.org/inversion-of-control-history.html
![Page 8: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/8.jpg)
Inversion of Control
![Page 9: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/9.jpg)
Programy před zavedením IoC
9 04/12/2023 For internal use only -- not for distribution
![Page 10: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/10.jpg)
Programy po zavedení IoC
10 April 12, 2023
![Page 11: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/11.jpg)
Komponenty a jejich vazby
11 April 12, 2023
![Page 12: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/12.jpg)
12 April 12, 2023
public class ReservationService { private BookService bookService; public ReservationService() { init(); }
private void init () { LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/home/johndoe/data.xml"); setBookService(localBookStore); } public boolean reserveBook(long bookId, Date from,Date to,User u) { Book book = bookService.getBook(bookId); //kod vlastní rezervace vynechan }
public void setBookService(BookService bookService) { this.bookService=bookService; }}
![Page 13: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/13.jpg)
Know Your Enemy
13 April 12, 2023
private void init () { LocalBookStore localBookStore = new LocalBookStore(); localBookStore.setPath("/home/johndoe/data.xml"); setBookService(localBookStore); }
![Page 14: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/14.jpg)
Generalizace problému• Kde najít• Jak získat• Jak zkonfigurovat• Jak spojit dohromady
14 April 12, 2023
![Page 15: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/15.jpg)
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 (loosely coupled)−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 April 12, 2023
![Page 16: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/16.jpg)
Service locator
16 April 12, 2023
![Page 17: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/17.jpg)
Dependency Injection
17 April 12, 2023
![Page 18: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/18.jpg)
Service locator vs. DI• Preferujte DI
−Žádné těsné vazby−Transparentní−No singleton hell
• Service locator−body napojení
• Servlet• Controller aplikace
18 April 12, 2023
![Page 19: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/19.jpg)
Co by měl DI framework zvládnout
![Page 20: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/20.jpg)
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
![Page 21: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/21.jpg)
Podpora základních typů realizace DI• Constructor injection
−Bezpečnější, Přehlednější−Nepovinné závislosti, Cyklické závislosti (proxy)
• Setter injection−Nepovinné či velké množství závislostí−Chybějící závislosti (@Required)
• Field injection−Jednoduchý zápis−Netransparentní
• Proč−Pro různé případy se hodí různé přístupy
21 April 12, 2023
![Page 22: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/22.jpg)
Metadata pro popis komponent• Anotace
−Jednoduchý zápis−Zapečené na úrovni kódu
• XML−Ukecané−Lze měnít v deployment time−Konfigurovatelné komponenty (vazba na
infrastrukturu)• Proč
−Obvykle oba typy komponent v aplikace
22 April 12, 2023
![Page 23: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/23.jpg)
Jak najít obrázky pro prezentaci
23 April 12, 2023
![Page 24: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/24.jpg)
24 April 12, 2023
![Page 25: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/25.jpg)
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í (mock objecty se stejným rozhraním)
25 April 12, 2023
![Page 26: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/26.jpg)
Ří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 April 12, 2023
![Page 27: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/27.jpg)
Řízené pořadí vzniku• Proč
−Nepřímé závislosti−Zajištění explicitního pořadí inicializace
27 April 12, 2023
Client DependencyInjector
getComponentA
readMetadata
ComponentA ComponentB ComponentC
new
getComponentC
init
null
new
setComponentB
![Page 28: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/28.jpg)
Ž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 April 12, 2023
![Page 29: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/29.jpg)
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 April 12, 2023
![Page 30: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/30.jpg)
Srovnání vybraných DI frameworků
![Page 31: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/31.jpg)
Dependency injection frameworky• Embedded frameworky
−PicoContainer 2.8−Google Guice 2.0
• Aplikační frameworky−JBoss Microcontainer 2.0.6 GA−Spring framework 2.5.x
• Standard−Apache OpenEJB 3.0
31 April 12, 2023
![Page 32: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/32.jpg)
32 April 12, 2023
![Page 33: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/33.jpg)
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 April 12, 2023
![Page 34: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/34.jpg)
34 April 12, 2023
![Page 35: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/35.jpg)
Questions?
![Page 36: Dependency Injection Frameworky](https://reader033.vdocuments.net/reader033/viewer/2022052505/55625337d8b42a6c368b514d/html5/thumbnails/36.jpg)
Technology for better business outcomes