Your SlideShare is downloading. ×
Dependency Injection Frameworky
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Dependency Injection Frameworky

2,522
views

Published on

Prezentace na tema Dependency inejction frameworky v Jave.

Prezentace na tema Dependency inejction frameworky v Jave.

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,522
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

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?