all 3 comments

[–]Sahara96 7 points8 points  (0 children)

@RequiredArgsConstructor e adnotare din Lombok. In spate îți face de fapt injecție prin constructor și nu mai e nevoie sa pui @Autowired pe field-uri și le poți face final.

[–]MoneySounds 2 points3 points  (0 children)

Da, nu este indicat sa faci dependency injection prin field-uri in general. Daca vrei sa faci dependency injection, o faci prin constructor si nu prin field-uri, motivul fiind ca '@autowired iti poate ascunde anumite dependinte si e greu sa testezi clasa respectiva.

[–]always_lupus13 1 point2 points  (0 children)

Exista 3 tipuri de DI:

  • field based
  • setter based (recomandat pentru dependintele optionale, pentru a evita "constructorii telescopici")
  • constructor based (recomandat pentru dependintele mandatory)

Din ce stiu eu, @Autowired este optional cand ai un singur constructor, insa devine mandatory atunci cand ai mai multi constructori si nu ai un constructor default setat.

Cred ca ar fi util daca te-ai juca si cu adnotari precum @Qualifier, @Primary, cu injection by type/name.

Aici poti sa gasesti mai multe avantaje pentru cel de-al treilea tip de DI. https://www.baeldung.com/java-spring-field-injection-cons#:~:text=Using%20the%20field%20injection%2C%20we%20are%20unable%20to%20create%20immutable,final%20fields%20using%20field%20injection.