O que significa Injeção de Dependências?

Li por aí mas não entendi, preciso de uma abordagem marginal.
Um linguajar de programador, alguém pode me explicar o que significa isso?

:?:

Bom dia,

dá umalida no artigo do Martin Fowler, ele explica isso!

bem…
na pratica…

a classe UsuarioBO utiliza a classe UsuarioDAO pra salvar os dados no BD, logo UsuarioBO depende de UsuarioDAO para salvar os dados…

injeção de dependências significa que vc esta pegando uma instancia da classe UsuarioDAO e setando ela no UsuarioBO sem a necessidade do programador fazer isso (instanciar a classe) porque na pratica ela já vai estar lá…

Dois textos excelentes para você entender são:

1 - http://www.javafree.org/content/view.jf?idContent=1
2 - http://forum.mentaframework.org/posts/list/193.page

A partir deles que eu consegui entender os conceitos.
Neste segundo, o exemplo é utilizando Mentawai, mas você consegue entender perfeitamente os conceitos, visto que ele é bem didático.

Espero ter complementado um pouco mais as demais respostas que você já recebeu.

Resumidamente, é uma abordagem onde um objeto recebe tudo que precisa para efetuar as suas tarefas. Por exemplo, no caso de um objeto que vai acessar o banco, usando DI ele recebe a conexão do objeto que o criou, e não cria a conexão dentro dele (que seria a forma mais natural).

É só pensar no seu trabalho. Se você recebesse todo material que precisa na hora de desempenhar uma tarefa seria bem mais fácil trabalhar do que ter ir atrás do que precisa. Certo?

Caros,

Verifiquem se eu entendi.

ao dizer que uma Classe minha chamada ClasseMinha é um EnterpriseBean do tipo Session Stateless com uma Annotation

//Acho que é assim @Stateless

Eu estou Injetando Dependência nessa ClasseMinha?

[quote=edpipole]a classe UsuarioBO utiliza a classe UsuarioDAO pra salvar os dados no BD, logo UsuarioBO depende de UsuarioDAO para salvar os dados…

injeção de dependências significa que vc esta pegando uma instancia da classe UsuarioDAO e setando ela no UsuarioBO sem a necessidade do programador fazer isso (instanciar a classe) porque na pratica ela já vai estar lá…[/quote]

Isso nao eh injecao de dependencias! Isso eh ‘passar um parametro pra um metodo’ :wink:

[quote=Cocota]Caros,

Verifiquem se eu entendi.

ao dizer que uma Classe minha chamada ClasseMinha é um EnterpriseBean do tipo Session Stateless com uma Annotation

//Acho que é assim @Stateless

Eu estou Injetando Dependência nessa ClasseMinha?[/quote]

Er, nao. Da uma lida no artigo do Fowler :wink:

Leia o FAQ 1) e o 5).

Qualquer dúvida poste aqui…

Acho que tô entenedendo.
Já percebi que está intimamente ligado a Padrões de Projeto.


Então, se MinhaClasse precisa ser um SessionBean, como é que eu realizo Injeção de Dependências nele?
R: Eu preciso dar-lhe as ferramentas que ele necessita. (ZehOliveira)

Pra ser um Session, ele precisa:
[list]ser tipado como javax.ejb.SessionBean[/list]
[list]ter uma interface remote/local e uma home/localhome[/list]
[list]implementar aqueles métodos ejbXXX[/list]
[list]ser descrito no ejb-jar.xml[/list]

Esqueci algo?

Já que eu já sei quais são as ferramentas que preciso dar à MinhaClasse, como faço isso com annotation?

Sinceramente? Acho que você ainda não entendeu… Dá uma lida no artigo do Fowler e na documentação do Spring. :wink:

Já que você é de Natal, você se inscreveu no Natal Java Day? Eu vou falar sobre isso em uma palestra…

Injecao de dependencias nao tem absolutamente nada a ver com Session Beans. :wink:

Eu sei pessoal, desculpem minha pouca habilidade com as palavras.
Ave…

O meu último Post foi uma pergunta-afirmando se eu estava com o pensamento certo. Perguntei COMO injetar dependências num SessionBean, e aproveitei pra falar a maneira como entendi.

Pelo post de David (estarei lá certamente) a maneira como entendi não foi a correta.

Não sei se é exatamente isso que você quer, mas dá uma olhada nesse link:

http://www.springframework.org/docs/reference/ejb.html

Ha, bacana, a galera de Natal aqui =]

Cara, o Fowler explica bem como funciona a Injeção de Dependência, mas só pra “devolver” o seu exemplo: no caso do EJB3, que foi o que você tentou fazer, uma maneira de injetar dependência em uma variável seria:

@EJB
private HelloBeanRemote helloBeanRemote;

E antes de você invocar este método, o container irá injetar uma instância da classe, sem você ter utilizado aquele procedimento todo utilizado no EJB 2.1-.

Também existe o @Resource, por exemplo, pra recursos, tais como DataSource. Enfim…

Mas é como o pessoal disse, dá uma lida no artigo que é bem mais conceitual e extremamente mais enriquecedor =]

Espero ter ajudado!

bom eu expliquei com o spring faz a injeção…(por exemplo)

injeção via metodo set! parametro…
e injeção via contrutor. parametro tbm…

como já haviam mandado o documento pra ele nada mais simples de ele entender com eu mandando um exemplo.

não vi uma explicação sua no topico.
bom sem comentarios…

[quote=cv][quote=edpipole]a classe UsuarioBO utiliza a classe UsuarioDAO pra salvar os dados no BD, logo UsuarioBO depende de UsuarioDAO para salvar os dados…

injeção de dependências significa que vc esta pegando uma instancia da classe UsuarioDAO e setando ela no UsuarioBO sem a necessidade do programador fazer isso (instanciar a classe) porque na pratica ela já vai estar lá…[/quote]

Isso nao eh injecao de dependencias! Isso eh ‘passar um parametro pra um metodo’ ;)[/quote]

Detalhe que DI eh extremamente viciante… depois do primeiro gole eh dificil parar…

[quote=fabiofalci]
Detalhe que DI eh extremamente viciante… depois do primeiro gole eh dificil parar…[/quote]

Concordo!
Fiz uma persistência em JPA sendo chamada por um EJB, tudo perfeito, somente com @EntityManager e talz.

Na hora de testar fazer persistência no lado do cliente sem o JBoss, lah vou eu atrás de transações e fábricas de entitymanager =D