Qaysi bog'lanishlarni injektsiya qilish turlarini bilasiz?
sobes.tech AI
AIdan javob
Uchun uchta asosiy turi mavjud:
-
Maydon orqali in'ektsiya (Field Injection): Bog'liqlik to'g'ridan-to'g'ri sinf maydoniga annotatsiya yordamida (masalan, Spring'da
@Autowired) in'ektsiya qilinadi. Oson foydalaniladi, ammo birlik testlarini qiyinlashtiradi va yagona javobgarlik prinsipini buzadi, bog'liqliklarni yashiradi.// Maydon orqali in'ektsiya misoli public class MyService { // Bog'liqlik to'g'ridan-to'g'ri maydonga in'ektsiya qilinadi @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Setter orqali in'ektsiya (Setter Injection): Bog'liqlik ochiq setter metod orqali in'ektsiya qilinadi. Bu ixtiyoriy bo'lishi mumkin (majburiy emas), bajarilayotgan vaqtida bog'liqliklarni o'zgartirish uchun qulay (garchi kamdan-kam ishlatiladi). Ob'ektni yaratishda majburiy bog'liqlikni yaratmaydi.
// Setter orqali in'ektsiya misoli public class MyService { private MyRepository repository; // Bog'liqlik setter orqali in'ektsiya qilinadi @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Konstruktor orqali in'ektsiya (Constructor Injection): Bog'liqlik konstruktor argumenti orqali in'ektsiya qilinadi. Bu tavsiya etiladi, chunki u bog'liqlik majburiyligini ta'minlaydi (uningsiz ob'ekt yaratilmaydi), unit testlarini osonlashtiradi (mock obyektlarni osongina o'tkazish mumkin) va sinf ehtiyojlarini aniq ko'rsatadi. Ob'ektlar, agar maydonlar final bo'lsa, o'zgarmas holga keltiradi.
// Konstruktor orqali in'ektsiya misoli public class MyService { private final MyRepository repository; // Maydon final bo'lishi mumkin // Bog'liqlik konstruktor orqali in'ektsiya qilinadi @Autowired // Springning yangi versiyalarida, agar faqat bitta konstruktor bo'lsa, bu annotatsiya olib tashlanishi mumkin public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Taqqoslash jadvali:
| In'ektsiya turi | Bog'liqlik majburiyligi | Foydalanish qulayligi | Test qilish imkoniyati | O'zgarmaslik |
|---|---|---|---|---|
| Maydon orqali | Tanlov (yashirilgan) | Yuqori | Past | Yo'q |
| Setter orqali | Tanlov | O'rtacha | O'rtacha | Yo'q |
| Konstruktor orqali | Majburiy | O'rtacha | Yuqori | Mümkin |
Ko'p hollarda, konstruktor orqali in'ektsiya tavsiya etiladi.