Sobes.tech
Middle
142

Spring Bean-ті пайдалана отырып, тәуелділікті енгізуді қалай қолдануға болады?

AI-дан жауап

sobes.tech AI

Spring Boot DI-ны үш негізгі әдіспен қолдайды:

  1. Өріс арқылы енгізу:
    Ең кең таралған және қарапайым әдіс. @Autowired-ды өріс үстіне қолдану. Өндірістік код үшін ұсынылмайды, себебі тестілеу мен инкапсуляция қиындық тудырады.

    // Өріс арқылы енгізу
    @Service
    public class MyService {
    
        @Autowired
        private MyDependency dependency;
    
        public void doSomething() {
            dependency.execute();
        }
    }
    
  2. Setter арқылы енгізу:
    @Autowired-ды сеттер үстіне қолдану. Бұл тәуелділіктің опционалдығын қамтамасыз етеді (егер сеттер шақырылмаса) және тестілеуді жеңілдетеді.

    // Setter арқылы енгізу
    @Service
    public class MyService {
    
        private MyDependency dependency;
    
        @Autowired
        public void setDependency(MyDependency dependency) {
            this.dependency = dependency;
        }
    
        public void doSomething() {
            dependency.execute();
        }
    }
    
  3. Constructor арқылы енгізу:
    Ең ұсынылатын әдіс. @Autowired-ды конструктор үстіне қолдану. Бұл тәуелділіктің объект құрылғаннан кейін өзгермейтінін қамтамасыз етеді және міндетті тәуелділіктерді нақты көрсетеді. Spring Boot 2.x+ нұсқаларында бір ғана конструктор болған жағдайда @Autowired-ды қою міндетті емес.

    // Constructor арқылы енгізу
    @Service
    public class MyService {
    
        private final MyDependency dependency;
    
        // Spring Boot 2.x+ нұсқаларында бір ғана конструктор болғанда @Autowired-ды қою міндетті емес
        public MyService(MyDependency dependency) {
            this.dependency = dependency;
        }
    
        public void doSomething() {
            dependency.execute();
        }
    }
    

Spring контейнері @Component, @Service, @Repository, @Controller сияқты аннотациялармен белгіленген кластарды сканерлеп, оларға Bean-дар жасайды. Егер Bean-да @Autowired аннотациясы өріс, сеттер немесе конструктор үстінде анықталса, контейнер басқа тәуелділікті табу үшін типі мен/немесе аты бойынша іздейді және оны енгізеді. Егер бірнеше сәйкес Bean болса, @Qualifier қолдану арқылы нақтылау жүргізіледі.