Spring @Autowired na konstruktorze.

Spring @Autowired na konstruktorze.
GU
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Od springa 4.3 nie trzeba dodawać adnotacji @Autowired na konstruktorze (jeśli jest jeden w klasie).
Chciałem się zapytać, czy to jakoś poprawia performance aplikacji?
Czy jeśli mamy 20 klas które mają @Autowired na konstruktorze który i tak jest skanowany przez @Service/@Component, to czy to jest jakiś overhead?

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Przede wszystkim - po co zaśmiecać kod? :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Zobacz pozostałe 5 komentarzy
S9
Taka że jak wstrzykujemy w konstruktorze klasy C instancje typów A i B to nie powinno nas interesować specjalnie skąd będa dostarczone te instancje.
azalut
@scibi92 taka idea DI masz rację, natomiast ja tam byłem zwolennikiem dawania tego @Autowired żeby była świadomość że coś tu bedzie wstrzyknięte, bo tak masz obiekt który nie wiesz czy ktoś ma sobie utworzyć czy poprosić kontener; kiedys byłem zwolennikiem takiego uproszczania ale jakoś mi to minęło :P
DA
Niby wszyscy wiedzą, ale zdarza się że nie :D
PI
dokładnie, @yarel +1 :D
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:18 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
2

W przypadku springa istotne jest nie to, że masz adnotację @Autowired na konstruktorze, ale to, w jaki sposób wstrzykiwane są beany w przypadku wstrzyknięć przez pola. W praktyce spring sprawdza, ile jest konstruktorów w klasie. Jeżeli jest więcej niż jeden, to dopiero wtedy skanuje, pod kątem adnotacji na konstruktorze.

IMO, nie używaj adnotacji @Component i @Autowired. Zamiast tego użyj ich w pliku konfiguracyjnym. Dzięki temu twój kod będzie pozbawiony referencji do springa. Co prawda będziesz musiał trochę więcej napisać, ale migracje, chociażby do testów, będą bajecznie proste.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
GU
dlaczego migracje testów będą prostę w przypadku Java Config?
Koziołek
Ponieważ twój kod nie jest zależny od Springa i można nim swobodnie manipulować w trakcie testów.
damianem
  • Rejestracja:prawie 8 lat
  • Ostatnio:4 miesiące
  • Postów:205
0

Nie ma to wpływu na performance, tak czy siak Spring musi przeskanować metody potencjalnego beana.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.