Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida na hora de injetar uma classe

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

1 resposta
solução!

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!