[2026-03-06] Czy wiesz, że zależności w Springu powinniśmy wstrzykiwać przez konstruktor?#277
[2026-03-06] Czy wiesz, że zależności w Springu powinniśmy wstrzykiwać przez konstruktor?#277
Conversation
| Wstrzykiwanie zależności przez konstruktor to najlepsza praktyka w aplikacjach Spring. | ||
| Zapewnia bezpieczeństwo, czytelność kodu, łatwość testowania i zgodność z zasadami SOLID. | ||
| Warto stosować to podejście zawsze, gdy to możliwe, a inne metody rezerwować dla szczególnych przypadków (opcjonalne zależności, legacy code). | ||
| Dzięki temu Twój kod będzie bardziej niezawodny i łatwiejszy w utrzymaniu. |
| *Adnotacja `@RequiredArgsConstructor` pochodzi z biblioteki Lombok i automatycznie generuje konstruktor przyjmujący wszystkie pola oznaczone jako `final` | ||
| lub z adnotacją `@NonNull`.* | ||
|
|
||
| - Wstrzykiwanie przez konstruktor z wykorzystaniem adnotacji `@RequiredArgsConstructor` oraz `@Qualifier` |
There was a problem hiding this comment.
Ja bym usunął z tego wpisu te informacje o @qualifier. W tej postaci można odnieść wrażenie, że @qualifier działa tylko w tym konkretnym przypadku, podczas gdy można go użyć w pozostałych trybach czyli jawny konstruktor, settery i autowired.
Ewentualnie można opisać działanie w osobnym akapicie i tam rozróżnić użycie z Lombok i bez.
| Możemy wyróżnić kilka sposobów wstrzykiwania zależności, z których każdy ma swoje zalety i ograniczenia. | ||
| Poniżej przedstawiam najpopularniejsze techniki DI: | ||
|
|
||
| - Wstrzykiwanie przez konstruktor z jawnie zdefiniowanym konstruktorem |
There was a problem hiding this comment.
stylistyka: "Wstrzykiwanie jawnie zdefiniowanym konstruktorem"
| - Wstrzykiwanie przez konstruktor z jawnie zdefiniowanym konstruktorem | ||
| ```java | ||
| @Component | ||
| public class ServiceA { |
There was a problem hiding this comment.
luźna sugestia. ServiceA, ServiceB nic nie znaczą, dlatego zawsze namiawiam, żeby w przykładach używać realistycznych nazw - taki kod jest wtedy bardziej czytelny.
Na przykład OrderService do którego wstrzykujemy PaymentService.
No description provided.