Injeção de dependências seria poder usar os metodos de uma classe sem ter que instanciar ela, está certo o raciocínio ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Injeção de dependências seria poder usar os metodos de uma classe sem ter que instanciar ela, está certo o raciocínio ?
Seria poder "receber" um objeto já instanciado.
Perceba: Não há como fugir de instanciar um objeto. O que o contêiner faz é instanciá-lo para você e colocá-lo na classe que você precisa.
Há alguma formas de se "receber" essa dependência ou, em outras palavras, ter a dependência injetada:
Tendo:
@Service // ou @Repository ou @Controller ou outros
public class Bar {
//.... implementação
}Seguem algumas possibilidades:
1 - Field:
public class Foo {
@Autowired
private Bar bar;
// ...
}2 - Constructor:
public class Foo {
private Bar bar;
@Autowired // Aqui, essa anotação é opcional, se esse for o único construtor da sua classe;
public Foo(Bar bar) {
this.bar = bar;
}
}3 - Setter:
public class Foo {
private Bar bar;
@Autowired
/*
Sem a anotação abaixo,
caso o bean com o qual temos dependência não exista por algum motivo,
o objeto será construído com bar=null.
Colocar @Required, faz com que a injeção seja mandatória,
assim como acontece com os 2 exemplos supracitados.
*/
@Required
public void setBar(Bar bar) {
this.bar = bar;
}
}Espero ter ajudado.