Cześć,
mój pierwszy post więc wpierw chciałbym przywitać Was wszystkich.
Jestem obecnie na etapie szukania nowego miejsca pracy i jest taka sytuacja że kolega mnie polecił do pewnej firmy i dał mi parę wskazówek co do rozmowy kwalifikacyjnej. No i tam wymienił parę tematów które trzeba umieć na blachę i w tym również Dependency Injection w Springu i trzeba zaznaczyć że wstrzykiwanie przez konstruktor to jedyne słuszne (albo minimum zalecane) podejście.
No i w tym miejscu przypomniało mi się że byłem kiedyś na szkoleniu zewnętrznym ze springa gdzie prowadzący wspomniał aby nigdy nie używać @Autowired na polach w kodzie produkcyjnym z wyjątkiem testów. Było to ze 2 lata temu, po 2 dniach szkolenia człowiek wrócił do rzeczywistości gdzie w projekcie @Autowired jest używane na potęgę na polach i w sumie ciekawa wiedza ze szkolenia wyparowała.
No ale teraz kiedy na nowo pojawił się ten temat to się zastanawiam jak wstrzykiwanie poprzez konstruktor współdziała ze Springiem. Dla mnie dotychczas Spring dawał tę wygodę że deklaruję pola odnosząc się do interfejsów, Spring mi ładnie wstrzykuje implementację i cyk fajnie, bez zapychania konstruktorów parametrami dla zależności, działa sobie automatycznie.
No ale teraz kiedy ja na rozmowach śpiewam o tym DI poprzez konstruktor to sam się zastanawiam czy oni na prawdę używają tego rodzaju wstrzykiwania w projekcie czy to może jest taka troche ściema i pytają o to aby wiedzieć że przynajmniej kandydat ma świadomość różnych sposobów DI w Springu (ze na polach, konstruktorach i setterach) i że przynajmniej w teorii to powinno się używać poprzez konstruktor.
Próbując sobie wyobrazić jak miałoby to wyglądać w większym projekcie to ciężko jest mi to ogarnąć, powiedzmy że mamy wiele klas, każda po kilka zależności, wszędzie wymóg przez konstruktor. I jak wtedy mamy dostarczyć tę instancję? Tworzyć za każdym razem nowa, poprzez jakąś Fabrykę? Zapewnić w ramach fabryki aby to była jedna instancja na sesje (od tego chyba jest Spring właśnie)?
Czy wy, zaczynając nowy projekt w Springu i mając za zadanie zdecydować, jaki rodzaj DI użyć to co bralibyście pod uwagę i dlaczego podjęlibyście taką a nie inną decyzję? Może stosować różne zależnie od problemu w danym fragmencie kodu?
Ogólnie mam wrażenie że jakbym trafił do tej firmy to by się okazało że używają @Autowired na polach i rozmowa rozmową ale rzeczywistość jest taka sama wszędzie, @Autowired się przyjęło na polach, działa, więc nie komplikujemy skoro spełniamy wymagania klienta.
@jarekr000000 film który podałeś oglądnę wieczorem, jeśli znajdę tam odp na moje pytania to super. Nie ukrywam że mimo tego chciałem trochę jeszcze rozruszać dyskusję i poznać wasze zdania na ten temat.