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;
*
*/
}
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;
*
*/
}
Lembrete!
Criar construtores em classes abstratas te obriga a criar construtores nas classes filhas chamando o construtor da classe mãe.
Top comments (0)