Oi gente, tudo bem
gostaria de poder entender um pouco mais sobre o conceito de injeção de dependencia, e em que caso que pode ser util?
Caso alguém tenha algum exemplo simples pra poder me ajudar a entender, ficaria muito grato.
Agradeço o exemplo, mas não teria algo mais simples…
Pois o texto é longo e complexo, parece estar explicando um padrão de projeto
Posso tentar esclarecê-lo, mas o meu esclarecimento vai em duas etapas. Evitarei o uso de termos com “o princípio hollywood”, que, provavelmente, você já deve ter ouvido falar. Vamos lá:
1 - se você quer injeção de dependência, é porque você quer construir algum objeto que depende de outros;
2 - existem várias formas manuais (“by hand”) de se passar a dependência para um objeto, a que eu prefiro é via construtor (quando disponível);
3 - imagine que o objeto que você quer construir recebe 15 dependências via construtor. Não é trabalhoso passar essas dependências manualmente? Pior, imagine que uma das dependências, para ser construída, também necessite que suas dependências sejam resolvidas?
Conclusão 1: a injeção de dependências permite que o contêiner se encarregue de construir seus objetos com toda a complexidade descrita acima.
Continuando…
1 - se você passou suas dependências, no lugar de deixá-las “hardcoded”, ou seja, se você evitou usar o operador new dentro do seu objeto dependente, você terá de bônus a capacidade de passar dependências fictícias caso queira testar seu objeto;
2 - agora, repare que a injeção de dependência permite que você teste suas classes mais facilmente, basta sinalizar para o contêiner que, no lugar de passar dependências reais, que seja passado dependências fictícias (mock).
Mesmo que você não tivesse injeção de dependência, o design no qual as dependências são passadas via construtor ou via setter na mão, já ajuda na parte de testes.
Resumo da opera: injeção de dependência ajuda a lidar com a complexidade de criar objetos com muitas dependências, além disso, um design no qual as dependências são injetadas ou passadas como parâmetro (seja construtor ou via setter) permite que o objeto dependente seja testado, passando objetos fictícios, quando necessário.
Abraço
[quote=fabiobh]Agradeço o exemplo, mas não teria algo mais simples…
Pois o texto é longo e complexo, parece estar explicando um padrão de projeto[/quote]
Oi, fabiobh
Te aconselho esse site: http://www.neoframework.org/dist/documentacao/cap_injecao.html. É bem simples e claro.
Injeção de dependencia é quando você quer que o objeto X seja fornecido para vc. E vc não tenha que se preocupar.
Vamos supor que vc tenha uma classe asim:
@Stateless
public class UserFacade{
public void salvar(User user){...}
public void editar(User user){...}
// E assim vai
}
Aí no seu projeto web voce para poder acessar a classe Facade com tudo configurador bonitin (conexão aberta, contexto e tals)
bastaria fazer assim (supondo que vc utilizaria JSF)
public class UserManagedBean{
@EJB
UserFacade userFacade;
}
Repare que vc não irá precisará buscar o UserFacade via RMI ou Lookup ou fazer um new UserFacade(). O container (JBoss, tomcat, etc) irá fazer isso para vc.