Sobes.tech
Middle

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.