Inversion of control

1,292 views
1,232 views

Published on

Presentation about IoC

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,292
On SlideShare
0
From Embeds
0
Number of Embeds
139
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Inversion of control

  1. 1. Inversion of controlThe Dependency Injection patternBruno Lui
  2. 2. Introdução* Padrão comum entre frameworks* Objetivo de fazer a amarração entre componentes* Frameworks começam a fornecer soluções
  3. 3. Exemplo inicialclass MovieLister... public Movie[] moviesDirectedBy(String arg) { List allMovies = finder.findAll(); for (Iterator it = allMovies.iterator(); it.hasNext();) { Movie movie = (Movie) it.next(); if (!movie.getDirector().equals(arg))                it.remove(); } return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);    }
  4. 4. Extraindo uma interface e criando implementaçãopublic interface MovieFinder{List findAll() ;}class MovieLister... private MovieFinder finder; public MovieLister () { finder = new ColonDelimitedMovieFinder("movies1.txt"); }
  5. 5. As dependências
  6. 6. Injeção de dependências- Ter um objeto separado, o montador (assembler).- Popula um campo em um objeto (lister) com umaimplementação apropriada para uma interface (finder). Existem três tipos principais- Constructor Injection (Injeção por Construtores)- Setter Injection (Injeção por Métodos Set)- Interface Injection (Injeção por Interfaces).
  7. 7. Exemplo com PicoContainer class MovieLister... class ColonMovieFinder... public MovieLister(MovieFinder finder) { public ColonMovieFinder(String filename) { this.finder = finder; this.filename = filename; } }private MutablePicoContainer configureContainer() { MutablePicoContainer pico = new DefaultPicoContainer(); Parameter[] finderParams = { new ConstantParameter("movies1.txt")}; pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams); pico.registerComponentImplementation(MovieLister.class); return pico;}
  8. 8. Exemplo com Springclass MovieLister... private MovieFinder finder; class ColonMovieFinder... public void setFilename(String filename) { public void setFinder (MovieFinder finder) { this.filename = filename; this.finder = finder; } } <beans> <bean id="MovieLister" class="spring.MovieLister"> <property name = "finder"> <ref local = "MovieFinder" / > < / property> < / bean> <bean id="MovieFinder" class="spring.ColonMovieFinder"> <property name = "filename"> <value>movies1.txt< / value> < / property> < / bean> < / beans>
  9. 9. Referênciashttp://martinfowler.com/articles/injection.htmlhttp://javafree.uol.com.br/artigo/871453/Inversion-Of-Control-Containers-de-Inversao-de-Controle-e-o-padrao-Dependency-Injection.htmlhttp://imasters.com.br/artigo/4497/spring_framework_introducao

×