Sobes.tech
Middle
172

Қазіргі Spring-те @Autowired аннотациясын көрсету қажеттілігі неге жоқ?

AI-дан жауап

sobes.tech AI

Spring 4.3-тан бастап, егер класс тек бір ғана конструкторға ие болса, Spring автоматты түрде тәуелділіктерді осы конструктор арқылы енгізеді, тіпті @Autowired болмаса да.

Көптеген конструкторлары бар жағдайда, Spring әлі де @Autowired аннотациясын талап етеді, ол қай конструкторды тәуелділіктерді енгізу үшін қолдану керектігін анықтау үшін.

Бір ғана конструкторы бар мысал:

// Бір конструкторы бар класс мысалы
public class MyService {

    private final SomeDependency dependency;

    public MyService(SomeDependency dependency) { // Spring автоматты түрде SomeDependency-ті енгізеді
        this.dependency = dependency;
    }

    // ... басқа әдістер
}

Көптеген конструкторлары бар және @Autowired қолданылған мысал:

// Көптеген конструкторлары бар класс мысалы
public class MyOtherService {

    private final AnotherDependency anotherDependency;
    private final OptionalDependency optionalDependency;

    // Тәуелділіктері жоқ конструктор
    public MyOtherService() {
        this.anotherDependency = null;
        this.optionalDependency = null;
    }

    @Autowired // Spring осы конструкторды тәуелділіктерді енгізу үшін қолданады
    public MyOtherService(AnotherDependency anotherDependency, OptionalDependency optionalDependency) {
        this.anotherDependency = anotherDependency;
        this.optionalDependency = optionalDependency;
    }

    @Autowired(required = false) // Қосымша конструктор, OptionalDependency қолданады
    public MyOtherService(OptionalDependency optionalDependency) {
        this.anotherDependency = null;
        this.optionalDependency = optionalDependency;
    }

    // ... басқа әдістер
}

Бұл ерекшелік boilerplate-код санын азайтады және кластарды оқуға жеңілдетеді, әсіресе Constructor Injection кезінде. Бұл тәуелділіктерді енгізудің қазіргі заманғы Spring қосымшаларында ұсынылатын әдісі, себебі ол өзгермейтін объектілерді құруға ықпал етеді және тестілеуді жеңілдетеді.