Кадом навъи ворид кардани вобастагиро медонед?
sobes.tech AI
Ҷавоб аз AI
Ду намуд 3 навъи асосӣ ҳаст:
-
Вуруд дар майдон (Field Injection): Вуруд дар мустақиман ба майдони синф бо истифода аз аннотация (масалан,
@Autowiredдар Spring). Осон барои истифода, аммо мушкил мекунад тестгирии модулӣ ва вайрон мекунад принсипи масъулияти ягона, пинҳон кардани вобастагиҳо.// Намунаи вуруд дар майдон public class MyService { // Вобастагӣ мустақиман ба майдон ворид мешавад @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Вуруд тавассути сеттер (Setter Injection): Вобастагӣ тавассути усули умумии сеттер ворид мешавад. Имкон медиҳад, ки вобастагиро интихобӣ дошта бошад (наметавонад гузошта шавад), барои тағир додани вобастагиҳо дар вақти иҷро кардан қулай аст (гарчанде ки кам истифода мешавад). Вобастагии ҳатмиро дар вақти сохтани объект намекунад.
// Намунаи вуруд тавассути сеттер public class MyService { private MyRepository repository; // Вобастагӣ тавассути сеттер ворид мешавад @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Вуруд тавассути конструктор (Constructor Injection): Вобастагӣ тавассути аргументи конструктор ворид мешавад. Ин беҳтар аст, зеро кафолат медиҳад, ки вобастагӣ ҳатмӣ аст (беъзи он, объект наметавонад сохта шавад), тестгирии модулӣ осон аст (модулҳоро ба осонӣ пешниҳод кардан мумкин аст) ва ниёзҳои синфро равшан нишон медиҳад. Объектҳоро пас аз сохтан тағирнопазир мекунад, агар майдонҳо
finalбошанд.// Намунаи вуруд тавассути конструктор public class MyService { private final MyRepository repository; // Майдон метавонад `final` бошад // Вобастагӣ тавассути конструктор ворид мешавад @Autowired // Дар версияҳои навтарини Spring, метавон аннотатсияро гузошт ё нагузошт public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Таблиғи муқоиса:
| Навъи воридкунӣ | Зарарнокии вобастагӣ | Осонии истифода | Тестгирӣ | Ногузаришпазирӣ |
|---|---|---|---|---|
| Аз тариқи майдон | Интихобӣ (пинҳоншуда) | Баланд | Низо | Не |
| Аз тариқи сеттер | Интихобӣ | Миёна | Миёна | Не |
| Аз тариқи конструктор | Зарарнокӣ | Миёна | Баланд | Мумкин |
Дар аксари ҳолатҳо тавсия дода мешавад, ки воридкунии тавассути конструктор истифода шавад.