Faqat konstruktor orqali emas, balki bog'liqliklarni ham kiritish mumkinmi?
sobes.tech AI
AIdan javob
Ha, mumkin. Konstruktor orqali bog'liqliklarni in'ektsiya qilish (Constructor-based dependency injection) bilan bir qatorda, Spring Frameworkda quyidagi asosiy usullar mavjud:
-
Setter orqali in'ektsiya (Setter-based dependency injection): Bog'liqliklar ochiq metod-setterlar orqali in'ektsiya qilinadi.
public class MyClass { private Dependency dependency; public void setDependency(Dependency dependency) { this.dependency = dependency; } // ... boshqa metodlar } -
Maydon orqali in'ektsiya (Field-based dependency injection): Bog'liqliklar to'g'ridan-to'g'ri sinf maydonlariga anotatsiyalar yordamida (masalan,
@Autowired) in'ektsiya qilinadi. Bu usul eng keng tarqalgan, ammo o'z kamchiliklari bor (masalan, birlik testlari uchun qiyinchilik va yashirin bog'liqlik).public class MyClass { @Autowired private Dependency dependency; // ... boshqa metodlar } -
Metodlar orqali in'ektsiya (Method-based dependency injection): Kamroq keng tarqalgan usul bo'lib, bog'liqliklar har qanday
@Autowiredbilan belgilangan metod orqali in'ektsiya qilinadi.public class MyClass { private Dependency dependency; @Autowired public void configure(Dependency dependency) { this.dependency = dependency; } // ... boshqa metodlar }
Usul tanlovi aniq holat va afzalliklarga bog'liq. Konstruktor orqali in'ektsiya odatda afzal ko'riladi, chunki u ob'ektni barcha zarur bog'liqliklar bilan yaratishni ta'minlaydi va test qilishni osonlashtiradi. Biroq, maydonlar yoki setterlar orqali in'ektsiya, opsional bog'liqliklar uchun yoki legacy-kod bilan ishlashda qulayroq bo'lishi mumkin.