Sobes.tech
Middle

Spring Bean yordamida bog'liqliklarni injektsiya qilishni qanday qo'llash mumkin?

sobes.tech AI

AIdan javob

Spring IoC konteyneri Spring Beanlarning (obyektlarning) hayot aylanishini boshqaradi. Beans Spring ilovalarning asosiy qurilish bloklaridir. Spring Beans bilan bog'liqliklarni inject qilish (DI) konfiguratsiya orqali amalga oshiriladi, bu konteynerga qanday qilib komponentlarni yaratish va ulashishni ko'rsatadi.

Springda bog'liqliklarni inject qilishning (DI) uchta asosiy usuli mavjud:

  1. Konstruktor yordamida inject qilish: Spring Beanni yaratishda mos keladigan konstruktorni chaqiradi. Bu usul afzal ko'riladi, chunki u ob'ektni yaratishda barcha zarur bog'liqliklar inicializatsiya qilinishini ta'minlaydi va bog'liqliklarni o'zgarmas qilish imkonini beradi.
  2. Setter yordamida inject qilish: Spring, Bean yaratgandan so'ng, bog'liqliklarni o'rnatish uchun setter metodlarini chaqiradi. Bu usul, opsional bog'liqliklar uchun foydalidir.
  3. Maydon yordamida inject qilish: Spring, reflection yordamida bog'liqliklarni to'g'ridan-to'g'ri klass maydonlariga inject qiladi. Bu tavsiya etilmaydi, chunki bu test qilishni qiyinlashtiradi va inkapsulyatsiyani buzadi.

Bog'liqliklarni inject qilish uchun konfiguratsiya quyidagi usullar bilan amalga oshirilishi mumkin:

  • Annotatsiyalar: @Autowired, @Qualifier, @Value. Zamonaviy Spring ilovalarida eng keng tarqalgan yondashuv.

    // Konstruktor yordamida inject qilish misoli, annotatsiya bilan
    @Component // Klassni Spring Bean qilish
    public class MyService {
    
        private final MyDependency dependency;
    
        @Autowired // Springga bog'liqlikni konstruktor orqali inject qilishni ko'rsatadi
        public MyService(MyDependency dependency) {
            this.dependency = dependency;
        }
    
        // ...
    }
    
    @Component
    public class MyDependency {
        // ...
    }
    
    // Setter yordamida inject qilish misoli, annotatsiya bilan
    @Component
    public class AnotherService {
    
        private AnotherDependency dependency;
    
        @Autowired // Springga bog'liqlikni setter orqali inject qilishni ko'rsatadi
        public void setDependency(AnotherDependency dependency) {
            this.dependency = dependency;
        }
    
        // ...
    }
    
    @Component
    public class AnotherDependency {
        // ...
    }
    
    // Maydon yordamida inject qilish misoli, annotatsiya bilan (tavsiya etilmaydi)
    @Component
    public class FieldInjectedService {
    
        @Autowired // Springga bog'liqlikni maydoniga inject qilishni ko'rsatadi
        private FinalDependency dependency;
    
        // ...
    }
    
    @Component
    public class FinalDependency {
        // ...
    }
    
  • XML konfiguratsiya: Eski yoki maxsus loyihalarda ishlatiladi.

    <!-- Konstruktor yordamida XMLda inject qilish misoli -->
    <beans>
        <bean id="myDependency" class="com.example.MyDependency"/>
    
        <bean id="myService" class="com.example.MyService">
            <constructor-arg ref="myDependency"/>
        </bean>
    </beans>
    
    <!-- Setter yordamida XMLda inject qilish misoli -->
    <beans>
        <bean id="anotherDependency" class="com.example.AnotherDependency"/>
    
        <bean id="anotherService" class="com.example.AnotherService">
            <property name="dependency" ref="anotherDependency"/>
        </bean>
    </beans>
    
  • Java konfiguratsiya (@Configuration va @Bean yordamida): Zamonaviy yondashuv, bu yordamida Spring konteynerini Java kod bilan konfiguratsiya qilish mumkin.

    // Java konfiguratsiya misoli
    @Configuration // Bu sinf konfiguratsiya sinfi ekanligini bildiradi
    public class AppConfig {
    
        @Bean // myDependency Bean'ini e'lon qiladi
        public MyDependency myDependency() {
            return new MyDependency();
        }
    
        @Bean // myService Bean'ini e'lon qiladi
        public MyService myService(MyDependency myDependency) {
            // Konstruktor yordamida inject qilish, Bean yaratilayotganda
            return new MyService(myDependency);
        }
    }
    

Spring IoC konteyneri, konfiguratsiyani (annotatsiyalar, XML, Java sinflar) skaner qiladi, Bean'larning nusxalarini yaratadi, ularning hayot aylanishini boshqaradi va bog'liqliklarni avtomatik ravishda inject qiladi. Bu komponentlarning bog'liqligini kamaytiradi, testlarni osonlashtiradi (mock obyektlar bilan bog'liqliklarni oson almashtirish mumkin) va kodni saqlashni osonlashtiradi.