Dependency Injection Frameworky
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Dependency Injection Frameworky

  • 4,007 views
Uploaded on

Prezentace na tema Dependency inejction frameworky v Jave.

Prezentace na tema Dependency inejction frameworky v Jave.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
4,007
On Slideshare
3,429
From Embeds
578
Number of Embeds
7

Actions

Shares
Downloads
27
Comments
0
Likes
0

Embeds 578

http://pichlik.sweb.cz 477
http://www.dagblog.cz 87
http://www.slideshare.net 8
http://blog.oxyonline.local 3
http://static.slidesharecdn.com 1
http://www.mefeedia.com 1
http://blog 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • dfdfdf

Transcript

  • 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
  • 4. Intro
  • 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
  • 8. InversionofControl
  • 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
  • 17. DependencyInjection
    17
    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
  • 30. Srovnání vybraných DI frameworků
  • 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
  • 35. Questions?