Escolar Documentos
Profissional Documentos
Cultura Documentos
Feeds
Posts RSS
Facebook
Tpicos recentes
Minicurso sobre Spring na Infoeste 2012
Spring Framework Parte 7 -> Agendamento de Tarefas
Spring 3.1 + Hibernate 4.0
Spring Framework Parte 6 -> Injeo de Dependncia via Anotaes
Java + FLEX Parte 3 -> Spring BlazeDS Integration + dpHibernate
Comentrios
Lazaro em Spring Security 3 -> Deixando sua aplicao Web segura!
Vincius em Spring Framework Parte 1 -> Dependency Injection
Rafael em Spring Framework Parte 2 -> Aspect Oriented Programming
Wellington em Spring Framework Parte 2 -> Aspect Oriented Programming
Wellington em Spring 3.1 + Hibernate 4.0
Posts Antigos
Selecionar o ms
Categorias
Core Java (6)
FLEX (3)
Hibernate (5)
Outras (5)
Spring (13)
SWING/AWT (5)
Twitter (2)
Web Service (1)
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 2 de 21
Meta
Login
WordPress
ago
Quem dessa rea e nunca ouviu falar de Spring Framework por favor levante a mo.. timo, todo mundo
pelo menos j ouviu falar desse tal de Spring.
Durante esta srie de tutoriais eu vou demonstrar o que , pra que server e como vc pode utilizar o Spring para facilitar
seus projetos.
Primeiramente, o que esse tal de Spring afinal de contas? Spring um framework que propicia um container para sua
aplicao, ou seja, sua aplicao roda em cima do container do Spring. Tal container prov principalmente a Injeo
de Dependncia e a Programao Orientada a Aspectos.
Nesta primeira parte eu vou falar sobre o padro Injeo de Dependncia e os benefcios que ele prov. Vamos l
ento:
O padro de projeto Injeo de Dependncia diz que uma classe no deve criar as suas dependncias, em outras
palavras, uma classe no deve instanciar seus atributos. Ao invs disso, eles devem ser injetados na classe atravs de
um mecanismo externo, ou atravs de quem criou o objeto desta classe.
Ainda no est claro n Vamos a um exemplo (baseado em um dos exemplos do livro Spring in Action 2, 2008) para
facilitar as coisas.
Vamos imaginar que fomos contratados para desenvolver o software do dolos Spring?, uma competio de talentos
musicais onde as pessoas cantam e/ou tocam. Primeiro de tudo vamos desenvolver uma interface genrica o suficiente
para todos os nossos competidores:
Pronto, agora todo mundo que for competir no dolos Spring vai ter que implementar essa interface para poder
participar ( quase como se fosse a inscrio da competio hahahahah pssima analogia.. ).
Vamos ento aos competidores, vamos comear com um cantor. Um cantor no toca nenhum instrumento musical, ele
apenas canta uma msica. Vamos ento interface que descreve uma msica:
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 3 de 21
Baseado na interface, j podemos criar uma msica:
Legal, algum vai cantar a famosa cantiga Atirei o pau no gato. Vamos codificar o cantor que ir fazer isso ento:
public Cantor() {
this.musica = new AtireiOPauNoGato();
}
Prontinho. Agora toda vez que um cantor for se apresentar ele ir cantar Atirei o Pau no Gato. Mas pera ai, tem alguma
coisa que no faz muito sentido aqui no tem?
Ser que TODO cantor da nossa competio vai cantar a mesma msica? Acho que no n E do jeito que esta classe
est implementada, ns temos que mudar a classe para ele cantar uma outra musica. Isso no l muito vivel
O que a Injeo de Dependncia prega que ao invs de o cantor se preocupar em ficar preparando a msica que ele
vai cantar, ele apenas vai receber a msica impressa um pouco antes da competio e pronto.
public Cantor() {
}
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 4 de 21
}
}
Pronto, o cantor j no est mais preparando a sua msica, pouco antes da apresentao ele vai receber a msica
(atravs do setter) e vai cant-la (porque quem bom faz ao vivo! hehehe).
Ok ok, at aqui no teve absolutamente NADA do tal do Spring, e vc provavelmente ainda no entendeu o porque
desse monte de interfaces que parecem bobas no mesmo?
Vamos l, advinhem quem vai dar a musica para o cantor? EXATO!! O container do Spring quem vai ser
responsvel por entregar a msica para o nosso cantor, ou em termos mais tcnicos, o container quem faz toda a
linkagem dos beans (cada objeto manipulado pelo container um bean, ex: uma musica, um cantor, um objeto que
acessa o banco de dados, etc).
Para ns vermos como isso tudo funciona (pq ngm gosta de bla bla bla), vou abrir o NetBeans 6.8, criar uma nova
Aplicao Java e criar as interfaces e classes descritas at aqui.
O NetBeans j traz as bibliotecas do Spring Framework junto com a IDE, o que te economiza um tempinho baixando-
as. Clique com o boto direito na pasta Bibliotecas e cliquem Adicionar bliblioteca e adicione a biblioteca Spring
Framework 2.5
Uma vez que o Spring j est no classpath ns j podemos criar um arquivo de configurao para descrever os beans
da nossa aplicao. Toda a configurao do container feita atravs de arquivos XML.
Sendo assim eu criei mais um pacote (conf) e criei o arquivo idolos.xml dentro dele, este ser o arquivo que o Spring
ir utilizar para o container da nossa aplicao.
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 5 de 21
A tag root dos arquivos de configurao do Spring a tag <beans> que define os namespaces e os DTDs necessrios.
De comeo deixe o arquivo assim:
</beans>
Essa a estrutura bsica de um arquivo de configurao (no se assuste com o tamanho dessa tag, vc no precisa
decorar essas coisas).
J que nossas classes esto prontas, vamos para o nosso primeiro competidor: Jos. O Jos vai cantar Atirei o Pau no
Gato. Para declar-lo e dar a msica pra ele vai ficar assim:
</beans>
Aqui que o Spring comea a trabalhar, cada tag no arquivo de configurao representa um objeto que o container ir
gerenciar. No nosso exemplo, temos o bean atireiopau que um objeto da classe AtireiOPauNoGato e o bean jose
que eh um Cantor e vai cantar a msica referenciada pelo bean atireiopau.
Essa a mgica da Injeo de Dependncia, o Jos teve a msica injetada nele, se a gente quiser que ele cante outra
msica no precisamos reescrever a classe Cantor, apenas injetar uma msica diferente nele.
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 6 de 21
Isso torna a aplicao muito mais desacoplada, muito mais fcil de testar e de reusar os mdulos!!!
Mas e para usar isso agora? Como que a gente pe isso pra funcionar? Eu quero ver o Jos cantar!!!! hehehe
competidor.apresentar();
}
A interface ApplicationContext justamente o container (um dos existentes) do Spring Framework. Existe tambm a
BeanFactory mas essa bem mais simples e eu no irei coment-la.
O que acontece nesse cdigo ento o seguinte: criado o container passando o arquivo de configurao que ele ir
utilizar, depois recuperado o bean jose do container (nesse momento o container instancia o bean e todas as suas
dependncias) e por fim, ns pedimos pro Jos se apresentar.
Voc dever ver ele cantando incrivelmente bem o clssico Atirei o Pau no Gato.
Porm o prximo competidor promete! Ele ir cantar E tocar Ciranda Cirandinha com uma gaita!! Essa eu quero ver!!
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 7 de 21
public interface Instrumento {
public void tocar();
}
public CantorTocador() {
super();
}
Pronto, agora nosso prximo competidor est pronto para se apresentar. Sras e Srs dem as boas vindas para Carlos:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
</beans>
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 8 de 21
competidor.apresentar();
}
}
E se a gente quisesse que o Carlos tocasse piano cantando Atirei o Pau no Gato? Simples:
public class Piano implements Instrumento {
public void tocar() {
System.out.println("PLIN PLIN PLIN");
}
}
</beans>
Basta injetar os beans desejados nas dependncias e boa! Tudo segue seu fluxo natural.
Esta foi uma pequena (eu diria mnima) introduo Injeo de Dependncias no Spring Framework. O container
ApplicationContext possui muuuuuito mais funes para gerenciar os seus beans, porm isso iria extender demais este
assunto.
Acho que se voc leu o post at aqui, vc conseguiu pegar o que eu quis passar: programar utilizando interfaces torna o
seu cdigo muito mais limpo, fcil de entender, fcil de dar manuteno, fcil de reutilizar, fcil de extender, ou seja,
melhora tudo!!
Adicionando isso com a tcnica de Injeo de Dependncia torna a aplicao altamente desacoplada em termos de
componentes (voc pode utilizar a classe Cantor em qualquer outra aplicao, s precisa passar uma classe que
implemente a interface Musica pra ele e tudo vai funcionar perfeitamente).
[]s e at a prxima,
Saab.
58 Comments
RSS
Filed under: Spring
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 9 de 21
Tags: dependencia, dependency, exemplo, framewrok, injecao, injection, interfaces, java, padrao, projeto, spring,
tutorial.
Death to DefaultTableModel! AbstractTableModel Rulez!
Spring Framework Parte 2 -> Aspect Oriented Programming
58 Responses so far
Aurelio
setembro 13th, 2010
12:04
Parabns pela matria! Excelente! Sua abordagem torna o assunto divertido e o aprendizado flui bem mais facilmente.
Saab
setembro 13th, 2010
15:12
Valeu Aurelio.
Muito bom saber que voc gostou e aprendeu com essa matria.
=]
Lucas
setembro 14th, 2010
9:27
Muito obrigado, me ajudou muito, s sofri um pouco por voc ter usado o NetBeans, mas quando eu finalmente
consegui configurar no Eclipse
Saab
setembro 20th, 2010
15:08
LuiVilella
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 10 de 21
outubro 4th, 2010
22:18
Muito didtico parabns Excelente abordagem, muito obrigado , pessoas como voc fazem Java valer a pena.
Parabens!!!
Jlio
outubro 26th, 2010
17:08
Fred Chevitarese
novembro 8th, 2010
15:12
Parabns!!!
Saab
novembro 13th, 2010
22:13
Jjose
novembro 19th, 2010
0:09
Mateus
novembro 19th, 2010
15:32
Ser que vale a pena dar uma olhada no Bean Factory tambm?
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 11 de 21
Saab
novembro 21st, 2010
14:52
Mateus,
Alguns recursos avanados que o ApplicationContext usa no esto presentes no BeanFactory, o que o torna um
container ainda mais leve, podendo rodar em ambientes com menos recursos disponveis (memria, processador,
hadrware em geral).
legal dar uma olhada para saber at onde vale a pena usar o BeanFactory, em outras palavras, caso sua aplicao use
apenas as funcionalidades que esto presentes no BeanFactory, pode ser mais interessante utiliz-lo para no tornar sua
aplicao um pouco mais pesada a troco de nada.
Bruno
janeiro 31st, 2011
14:20
Parabns pelo artigo, finalmente percebi (em portugus) a explicao do conceito Dependency Injection.
Roberto
fevereiro 1st, 2011
21:45
Saab,
Parabns pela srie de posts sobre Spring. De forma irreverente e muito didtica voc conseguiu explicar um assunto
que possu complexidade razovel para iniciantes.
Obrigado
Roberto
Saab
fevereiro 1st, 2011
22:01
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 12 de 21
Renato
fevereiro 24th, 2011
17:26
Boa Materia.
Obrigado.
Cristiano
maro 21st, 2011
8:23
Meu caro, parabns pelo texto, extremamente didtico, claro e fcil de entender! Sua abrodagem foi brilhante!
Sucesso pra voc, e obrigado por compartilhar seu conhecimento conosco!
Saab
maro 22nd, 2011
19:07
Paulo Eduardo
maro 24th, 2011
14:55
Cara, voc um gnio da didtica! hehehe. parabns velho, com certeza existem pessoas por a que sabem bem mais
que voc mas nem chegam perto da tua capacidade de transmitir o que sabe. Com certeza voc aprendeu com tutoriais
e livros nem to bem escritos, mas na hora de transmitir pensou mais nos outros. Continue escrevendo, parabns!
felipe
maio 6th, 2011
0:52
Parabns, realmente voc tem uma tima didtica!! Gostaria de ter lido este post antes, tive que aprender isso batendo a
cabea na mesa, lembro do artigo que eu li pra comear entender inverso de controle. eu achava que era uma coisa
de outro mundo. dai eu aprendi e fiquei com vontade de bater no cara que escreveu
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 13 de 21
aeuhaeueahueauheahue
parabns, ficou muito bom!
Rodrigo
maio 15th, 2011
23:11
Cara eu achei esse artigo no google na sexta a noite, mas como tava cansado no li inteiro, apenas adicionei nos
favoritos. No sabado de manh sai q nem um louco procurando um livro de spring pois toh precisando aprender para
trabalhar. Comprei o livro spring em ao. Agora li o artigo inteiro (q por sinal me deu uma boa idia do que injeo
de dependencia) e vejo q vc cita o livro q comprei. Acho q fiz uma boa escolha ento neh?? Cara seu artigo ficou muito
bom. Ajudou bastante.
Saab
maio 16th, 2011
22:46
heitor
maio 31st, 2011
20:50
Valeu
shen
junho 27th, 2011
10:48
cara, parabens cutrti muito o tutorial.. spring como todo Framework dificil de entender no comeo, mas vc ajudou
muito nas duvidas
valeeu!
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 14 de 21
Eric Lessa
julho 11th, 2011
16:51
Kra estou aqui pra desenterrar o artigo, como estou estudando agora Spring achei o artigo muito bom, bem explicado e
de fcil compreenso, descontrado tambm hehe, Parabns pelo trabalho e a vontade de compartilhar seus
conhecimentos.
Saab
julho 12th, 2011
20:47
Jackson William
julho 15th, 2011
11:19
Rapaz, sou novato na linguagem java, estou correndo atras de muitas coisas e me deparei com esta explicao e putzz,
muito massa meu velho.
Parabns pelo POST e muito obrigado por compartilhar o conhecimento. Ficou muito claro para mim.
Luana
agosto 10th, 2011
16:17
Oi Saab,
Vc muito didtico PARABNS adorei!
Beijos
Alexandre
outubro 3rd, 2011
11:49
Saab,
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 15 de 21
Excelente!
Rogerio
novembro 1st, 2011
11:29
Fantastico cara, nunca tinha visto seu site, mas j estou lendo tudo aqui. Vc explica muito bem, e manja muito do q ta
falando. Meus parabens!
Yuri
novembro 4th, 2011
3:53
Eu pensei que nunca entenderia esse assunto, mas agora ta tudo beleza. Valeu!!!
Thiago Marinho
novembro 5th, 2011
14:11
Eaew Saab =D blz? Vlw pelo post, muito didtico, divertido, gostei muito de ler, vou ler a srie completa de Spring,
estou precisando fazer um projeto na disciplina de Web, estava pensando em usar Ejb, que sei um pouquinho, mas
quero aprender Spring tbm, por isso escolhi ele, vou precisar do recurso de IoC (Injeo de Dependncia) que ele
possui, e vou fazer o projeto utilizando JPA com Hibernate e a camada de controle/viso com JSF 2.0. Logo, utilizarei:
Spring + Hibernate + JSF 2.0. Vlw abraos!
Saab
novembro 6th, 2011
12:04
Fala Thiago,
Boa sorte com o teu projeto e qualquer coisa pode ficar a vontade para postar dvidas relacionadas aos posts aqui no
blog.
=]
Robson Quaresma
dezembro 6th, 2011
10:55
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 16 de 21
Joel Sousa
dezembro 6th, 2011
22:05
Francisco Alves
dezembro 22nd, 2011
1:38
Manuel
dezembro 28th, 2011
13:34
Mariah
janeiro 31st, 2012
14:45
Ricardo S
fevereiro 16th, 2012
18:50
Parabns !!! Simples e claro de fcil compreenso partilhar conhecimento a melhor forma de se aprender mais
Valeu !!!
diego
maro 21st, 2012
15:29
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 17 de 21
Simples e didtico, parabns!
desconhecido
maro 27th, 2012
12:30
Rafael
maio 21st, 2012
20:54
Parabns, caraaa!!
to querendo aprender Spring 3, comeando do zero, e este site foi a melhor introduo que achei na internet at agora
muito obrigado
lucas
maio 24th, 2012
17:50
Estou comeando a usar o framework e estou tendo problema com a nova verso que no suporta ApplicationContext,
e estou tentando usar ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext
(conf/idolos.xml); s que ai est o problema quando eu fao mais de uma referncia no arquivo xml e executo ele da
pau, teria alguma idia de como eu contornaria isso??
Felipe Saab
maio 25th, 2012
21:32
No entendi o que vc quis dizer com quando eu fao mais de uma referncia no arquivo
E que histria essa da verso nova no suportar ApplicationContext? Quem te disse isso? Onde vc leu tamanha
besteira? hahahah
Vinicius Francisco
junho 19th, 2012
17:16
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 18 de 21
Parabns!!! Demorou mas eu sabia que algum ia descomplicar o JAVA.
Fabio
junho 20th, 2012
14:32
Pow muito lgl seu tutorial, s que to com um probleminha, quando eu rodo ele pelo eclipse ele me da o seguinte erro
Exception in thread main java.lang.NoClassDefFoundError:
Abrao
Ed
julho 2nd, 2012
23:36
Andre
julho 6th, 2012
17:00
Manoel
agosto 1st, 2012
11:51
Obrigado.
Manoel.
diego
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 19 de 21
agosto 21st, 2012
10:39
mto bom..
Jeferson
agosto 27th, 2012
16:37
Muito bom bom mesmo como nome do site diz java simples =)
Obs.: conheci seu site hj to meio atrasado neh mais pretendo ler tds os artigos
t+ abs
eu
agosto 29th, 2012
20:25
\o/
joab
setembro 12th, 2012
15:44
muito bom!
Paulo Srgio
fevereiro 6th, 2013
0:27
Thiago Lima
fevereiro 12th, 2013
16:54
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 20 de 21
Parabns, realmente o post de 2010 mas ajuda mesmo, principalmente da forma que foi abordado, um contedo
complexo mas tratado de forma clara e simples.
Muito obrigado, me ajudou muito!
william gueiros
fevereiro 28th, 2013
13:43
injecaodependencia.CirandaCirandinha
injecaodependencia.AtireiOPauNoGato
Danyllo Wagner
junho 5th, 2013
13:43
Caso a Classe CantorTocador tivesse ao inves de apenas um instrumento, tivesse uma lista:
Sandro Regis
julho 16th, 2013
20:22
Brother, voce simplesmente acabou de me tirar da caverna para a LUZ! Sem palavras para agradecer, soh faltou o
botao Donation. rs rs rs.
Vincius
setembro 21st, 2013
8:32
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013
Java Simples Spring Framework Parte 1 -> Dependency Injection Pgina 21 de 21
Excelente post. Foi a explicao mais simples e clara sobre injeo de dependncia que eu j achei.
Leave a comment
Name (required)
Website
Submit Comment
http://www.javasimples.com.br/spring-2/spring-framework-parte-1-dependency-injection 27/09/2013