Zamonaviy Springda nima uchun @Autowired anotatsiyasini ko'rsatish shart emas?
sobes.tech AI
AIdan javob
Spring 4.3 va undan keyin, agar sinf faqat bitta konstruktor bo‘lsa, Spring avtomatik ravishda bu konstruktor orqali bog‘liqliklarni in’ektsiya qiladi, hatto @Autowired bo‘lmasa ham.
Agar bir nechta konstruktor bo‘lsa, Spring aniq qaysi konstruktorni bog‘liqliklarni in’ektsiya qilish uchun ishlatishni ko‘rsatish uchun @Autowired annotatsiyasini talab qiladi.
Yagona konstruktor bilan misol:
// Yagona konstruktorli sinf misoli
public class MyService {
private final SomeDependency dependency;
public MyService(SomeDependency dependency) { // Spring avtomatik ravishda SomeDependency ni in’ektsiya qiladi
this.dependency = dependency;
}
// ... boshqa metodlar
}
Bir nechta konstruktor va @Autowired bilan misol:
// Bir nechta konstruktorli sinf misoli
public class MyOtherService {
private final AnotherDependency anotherDependency;
private final OptionalDependency optionalDependency;
// Bog‘liqliklar bo‘lmagan konstruktor
public MyOtherService() {
this.anotherDependency = null;
this.optionalDependency = null;
}
@Autowired // Spring bu konstruktorni bog‘liqliklarni in’ektsiya qilish uchun ishlatadi
public MyOtherService(AnotherDependency anotherDependency, OptionalDependency optionalDependency) {
this.anotherDependency = anotherDependency;
this.optionalDependency = optionalDependency;
}
@Autowired(required = false) // Qo‘shimcha konstruktor, OptionalDependency ni ishlatadi
public MyOtherService(OptionalDependency optionalDependency) {
this.anotherDependency = null;
this.optionalDependency = optionalDependency;
}
// ... boshqa metodlar
}
Bu xususiyat boilerplate kod miqdorini kamaytiradi va sinflarni o‘qilishi osonroq qiladi, ayniqsa Konstruktor orqali in’ektsiya qilishda. Bu zamonaviy Spring ilovalarda bog‘liqliklarni in’ektsiya qilish uchun tavsiya etilgan usul bo‘lib, u o‘zgarmas obyektlar yaratishni rag‘batlantiradi va testlarni osonlashtiradi.