1
resposta

Anotação Autowired vs Injeção no Construtor

Durante o curso percebi que o instrutor sempre utiliza o @autorwired para a injeção de dependência. Porém o spring permite que estas sejam injetadas diretamente no construtor sem necessidade da anotação com o mesmo efeito/resultado.

Pergunto qual das duas formas é a melhor prática ?

public class PedidoController {


    private final PedidoRepository repository;


    private final UserRepository userRepository;

    PedidoController(PedidoRepository repository, UserRepository userRepository){
        this.repository =  repository;
        this.userRepository= userRepository;

    }
1 resposta

Olá Cleber!

Essa é uma pergunta muito comum quando se trata de injeção de dependência no Spring. Ambas as formas, @Autowired e injeção no construtor, são boas práticas e possuem o mesmo efeito/resultado.

No entanto, a injeção no construtor é considerada a melhor prática, pois torna as dependências obrigatórias e imutáveis, o que facilita a manutenção do código e evita possíveis erros em tempo de execução.

Além disso, a injeção no construtor também permite que as dependências sejam injetadas de forma mais fácil em testes unitários, pois não é necessário usar o contexto do Spring para criar as instâncias.

Sendo assim, recomenda-se utilizar a injeção no construtor sempre que possível. O @Autowired deve ser utilizado apenas em casos específicos, como em classes que possuem muitas dependências e construtores muito longos.

Espero ter ajudado e bons estudos!