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

Dependency Injection Frameworky

on

  • 3,895 views

Prezentace na tema Dependency inejction frameworky v Jave.

Prezentace na tema Dependency inejction frameworky v Jave.

Statistics

Views

Total Views
3,895
Slideshare-icon Views on SlideShare
3,319
Embed Views
576

Actions

Likes
0
Downloads
27
Comments
0

7 Embeds 576

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

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • dfdfdf

Dependency Injection Frameworky Dependency Injection Frameworky Presentation Transcript

  • 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?