You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*Adnotacja `@RequiredArgsConstructor` pochodzi z biblioteki Lombok i automatycznie generuje konstruktor przyjmujący wszystkie pola oznaczone jako `final`
52
52
lub z adnotacją `@NonNull`.*
53
+
- Wstrzykiwanie przez pola
54
+
```java
55
+
@Component
56
+
publicclassOrderService {
57
+
@Autowired
58
+
privatePaymentService paymentService;
59
+
}
60
+
```
61
+
*Wstrzykiwanie przez pola jest najmniej zalecanym podejściem, ponieważ utrudnia testowanie i nie pozwala na oznaczenie zależności jako finalne.
62
+
Może być stosowane w wyjątkowych przypadkach, np. w bardzo prostych klasach lub kodzie legacy.*
63
+
64
+
65
+
### @Qualifier - kiedy i jak używać?
66
+
67
+
Adnotacja `@Qualifier` służy do wskazania konkretnego beana, gdy w kontekście Springa istnieje wiele beanów tego samego typu.
68
+
Technicznie działa w każdym stylu wstrzykiwania, ale podejścia różnią się czytelnością i łatwością testowania.
69
+
70
+
Najbardziej czytelnie: `@Qualifier` w konstruktorze
*Wstrzykiwanie przez settery może być uzasadnione, gdy zależność jest opcjonalna lub gdy pracujemy z kodem legacy, gdzie nie możemy zmienić konstruktora.*
85
138
86
-
- Wstrzykiwanie przez pola
87
-
```java
88
-
@Component
89
-
publicclassServiceA {
90
-
@Autowired
91
-
privateServiceB serviceB;
92
-
}
93
-
```
94
-
*Wstrzykiwanie przez pola jest najmniej zalecane, ponieważ utrudnia testowanie i nie pozwala na oznaczenie zależności jako finalne.
95
-
Może być stosowane w wyjątkowych przypadkach, np. w bardzo prostych klasach lub kodzie legacy.*
96
139
97
140
## Którą metodę powinniśmy wykorzystywać i dlaczego?
98
141
99
142
Rekomendowanym podejściem jest wykorzystywanie wstrzykiwania przez konstruktor. Oto powody, dla których to podejście jest preferowane:
100
143
101
144
-**Wymuszenie przekazania zależności podczas tworzenia obiektu** – wstrzykiwanie przez konstruktor gwarantuje,
102
145
że wszystkie wymagane zależności zostaną dostarczone w momencie tworzenia instancji obiektu. Dzięki temu unikamy sytuacji,
103
-
w której klasa może być używana bez pełnych zależności, co mogłoby prowadzić do błędów w czasie działania.
146
+
w której klasa może być używana bez pełnych zależności, co mogłoby prowadzić do błędów w runtime.
104
147
-**Niezmienność obiektu** – przypisanie zależności poprzez konstruktor oznacza, że pola te mogą być oznaczone jako `final`,
105
148
co zapewnia ich niezmienność i chroni przed niepożądanymi modyfikacjami w trakcie cyklu życia obiektu. Taka konstrukcja promuje czystszy i bardziej bezpieczny kod.
106
149
-**Testy jednostkowe** – wstrzykiwanie przez konstruktor ułatwia testowanie,
107
-
ponieważ możemy ręcznie dostarczać zależności (np. mocki) bez potrzeby używania narzędzi wspomagających, jak refleksja.
108
-
To pozwala na łatwiejsze pisanie testów jednostkowych i zachowanie pełnej kontroli nad zależnościami podczas testowania.
150
+
ponieważ możemy ręcznie dostarczać zależności (np. mocki) bez potrzeby używania takich narzędzi wspomagających, jak refleksja.
151
+
To ułatwia pisanie testów jednostkowych i pozwala na zachowanie pełnej kontroli nad zależnościami podczas testowania.
109
152
110
153
111
154
Wstrzykiwanie przez konstruktor wspiera zasady **SOLID**, w szczególności:
@@ -121,12 +164,12 @@ Programista, przeglądając kod, natychmiast widzi, jakie komponenty są wymagan
121
164
W przypadku wstrzykiwania przez konstruktor łatwiej jest zidentyfikować brakujące zależności lub problemy z ich konfiguracją podczas uruchamiania aplikacji,
122
165
ponieważ Spring od razu poinformuje nas o braku zależności, której nie można dostarczyć.
123
166
124
-
Konstruktor pozwala lepiej unikać problemów z cyklicznymi zależnościami, które mogą występować w innych formach wstrzykiwania (np. wstrzykiwanie przez pola).
167
+
Konstruktor pomaga w szybszym wykrywaniu problemów z cyklicznymi zależnościami, które mogą występować w innych formach wstrzykiwania (np. wstrzykiwanie przez pola).
125
168
Spring będzie w stanie zidentyfikować takie sytuacje już na etapie konfigurowania obiektów, co ułatwia ich eliminację.
126
169
127
170
## Podsumowanie
128
171
129
172
Wstrzykiwanie zależności przez konstruktor to najlepsza praktyka w aplikacjach Spring.
130
-
Zapewnia bezpieczeństwo, czytelność kodu, łatwość testowania i zgodność z zasadami SOLID.
131
-
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).
173
+
Zapewnia bezpieczeństwo, czytelność kodu, łatwość testowania i zgodność z zasadami SOLID.
174
+
Warto przyjąć to podejście jako domyślny standard w każdym projekcie, a inne metody rezerwować dla szczególnych przypadków (opcjonalne zależności, legacy code).
132
175
Dzięki temu Twój kod będzie bardziej niezawodny i łatwiejszy w utrzymaniu.
0 commit comments