Percebi que tem duas maneiras de injetar as classes colocando a anotação @Autowired e passando pelo construtor, gostaria de saber se tem alguma diferença entre os dois jeitos de fazer
Percebi que tem duas maneiras de injetar as classes colocando a anotação @Autowired e passando pelo construtor, gostaria de saber se tem alguma diferença entre os dois jeitos de fazer
Olá, Bruno! Excelente pergunta, mostra que você está atento aos detalhes!
A injeção de dependências pode ser feita de duas formas no Spring, como você bem observou: através da anotação @Autowired e pela injeção via construtor. Ambas têm o mesmo objetivo que é instanciar um objeto automaticamente para você.
A anotação @Autowired é a maneira mais antiga e mais comum de fazer isso. Você a coloca acima do atributo que deseja que o Spring instancie para você.
Por exemplo:
@Autowired
private AgendaDeConsultas agenda;
Por outro lado, a injeção via construtor é uma abordagem mais moderna e é considerada uma boa prática atualmente. Nesse caso, você declara as dependências no construtor da classe e o Spring cuida de instanciá-las para você. Isso facilita a escrita de testes unitários e torna o código mais limpo e fácil de entender.
Por exemplo:
private AgendaDeConsultas agenda;
public SuaClasse(AgendaDeConsultas agenda) {
this.agenda = agenda;
}
Nesse caso, não é necessário o uso da anotação @Autowired, o Spring reconhece automaticamente que precisa injetar as dependências quando elas são declaradas no construtor.
As duas abordagens fazem a mesma coisa, mas a injeção via construtor é considerada uma prática melhor e mais moderna, embora atualmente as bibliotecas de testes automatizados, como Mockito, consigam também injetar mocks mesmo sem um construtor na classe sendo testada.
Bons estudos!