1
resposta

Dúvida - Injeção de dependências

Bom dia,

Estou com uma dúvida durante o curso normalmente se injeta a classe do tipo Service na controller, gostaria de saber se houve alguma atualização quanto a essa prática?

No intelij aparece um warning sobre a anotação @Autowired, quando tento injetar a service na controller.
Uma dúvida simples, só pra saber se houve alguma atualização nesse meio de se utilizar a service.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Igor! Tudo bem?

O que está acontecendo é o seguinte: não houve mudança nas regras do Spring em relação a injetar a classe de serviço (@Service) dentro do controlador (@Controller), isso continua sendo a forma correta de organizar a arquitetura (Controller chama Service, Service chama Repository, etc.).

O aviso que você está vendo no IntelliJ não é um erro, mas sim uma boa prática recomendada pelas versões mais recentes do Spring e do próprio IntelliJ:

O @Autowired em campo (field injection) ainda funciona, mas não é recomendado.

A forma recomendada atualmente é a injeção de dependência através do construtor (constructor injection).

Exemplo:

@RestController
@RequestMapping("/categories")
public class CategoryController {

    private final CategoryService service;

    // O Spring injeta automaticamente sem precisar de @Autowired
    public CategoryController(CategoryService service) {
        this.service = service;
    }
}

Espero ter ajudado e bons estudos!