DEV Community

Leila Farias
Leila Farias

Posted on

4

Injeção de dependências com Spring e Lombok

Já conhecemos algumas formas de injetar objetos numa classe, dentro de um projeto Spring, como anotar com @Autowired um atributo da classe ou um construtor.

Porém, recentemente, aprendi mais 2 formas interessantes que eliminam parte do código fonte, que vou mostrar a seguir, ambas usando Lombok.

1ª forma: @AllArgsConstructor

O Lombok possui a annotation AllArgsConstructor que cria um construtor com todos os atributos da classe. Porém, usando o atributo da annotation onConstructor, permite você especificar qual annotation deve ser incluída no construtor gerado:

@RestController
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class UserController {

    private UserService userService;
    private Profession professionService;

    /*
     * Ao invés de usar assim:
     *
     * @Autowired
     * private UserService userService;
     *
     * @Autowired
     * private Profession professionService;
     *
    */
}
Enter fullscreen mode Exit fullscreen mode

2ª forma: @RequiredArgsConstructor

Basta anotar a classe com a annotation @RequiredArgsConstructor, que cria um construtor com todos os atributos final da classe. Assim, o Spring injeta pra gente as dependências obrigatórias.

@RestController
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;
    private final Profession professionService;

    /*
     * Ao invés de usar assim:
     *
     * @Autowired
     * private UserService userService;
     *
     * @Autowired
     * private Profession professionService;
     *
    */
}
Enter fullscreen mode Exit fullscreen mode

Lembrete!

Criar construtores em classes abstratas te obriga a criar construtores nas classes filhas chamando o construtor da classe mãe.

Referências

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up