JavaRush /Kurslar /All lectures for UZ purposes /Konfiguratsiya va autokonfiguratsiya

Konfiguratsiya va autokonfiguratsiya

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring Boot Java asosidagi konfiguratsiyani afzal ko'radi. Garchi SpringApplication ni XML manbalar bilan ishlatish mumkin bo'lsa-da, biz odatda asosiy manba bitta klass bo'lishini tavsiya qilamiz, u @Configuration bilan anotatsiyalangan bo'lishi lozim. Odatda, main metodini belgilaydigan klass asosiy @Configuration uchun yaxshi nomzoddir.

Internetda ko'plab Spring konfiguratsiyasining misollari mavjud, ularda XML-konfiguratsiya ishlatiladi. Iltimos imkon qadar har doim Java asosidagi ekvivalent konfiguratsiyani ishlatishga harakat qiling. Enable* anotatsiyalarini qidirish yaxshi boshlanish nuqtasi bo'lishi mumkin.

Qo'shimcha konfiguratsiya klasseni import qilish

Hamma @Configuration anotatsiyalarini bitta klassga joylashtirishingiz shart emas. Qo'shimcha konfiguratsiya klasseni import qilish uchun @Import anotatsiyasidan foydalanishingiz mumkin. Shuningdek, @ComponentScan anotatsiyasidan foydalangan holda Spring komponentlarini, jumladan @Configuration bilan anotatsiyalangan klasseni avtomatik ravishda yig'ish mumkin.

XML-konfiguratsiyani import qilish

Agar XML asosidagi konfiguratsiyani ishlatish majburiy bo'lsa, yana ham @Configuration anotatsiyasi bilan belgilangan klassdan boshlashni tavsiya qilamiz. Shundan so'ng XML-konfiguratsion fayllarni yuklash uchun @ImportResource anotatsiyasidan foydalanishingiz mumkin.

Autokonfiguratsiya

Spring Bootdagi autokonfiguratsiya qo'shilgan jar-zavisliliklarga asoslanib Spring ilovangizni avtomatik ravishda konfiguratsiya qilishga harakat qiladi. Masalan, agar HSQLDB sizning classpath-da mavjud bo'lsa, lekin siz qo'lda hech qanday ma'lumotlar bazasiga ulanish binlarini konfiguratsiya qilmagan bo'lsangiz, Spring Boot avtomatik ravishda rezident ma'lumotlar bazasini konfiguratsiya qiladi.

Autokonfiguratsiyaga ochiq rozilik berish lozim, buning uchun @EnableAutoConfiguration yoki @SpringBootApplication anotatsiyalarini @Configuration bilan anotatsiyalangan klasslardan biriga qo'shishingiz kerak.

Faqat bitta @SpringBootApplication yoki @EnableAutoConfiguration anotatsiyasini qo'shish kerak. Odatda biz asosiy @Configuration bilan anotatsiyalangan klassga aynan shu anotatsiyani qo'shishni tavsiya qilamiz.

Autokonfiguratsiyani bosqichma-bosqich almashtirish

Autokonfiguratsiya tajovuzkor emas. Har qanday vaqtda autokonfiguratsiyaning ma'lum qismlarini almashtirish uchun o'zingizning konfiguratsiyangizni boshlashingiz mumkin. Masalan, agar siz o'zingizning DataSource biningizni qo'shsangiz, unda o'rnatilgan ma'lumotlar bazasini qo'llab-quvvatlash vositalari sukut bo'yicha o'chiriladi.

Agar qaysi autokonfiguratsiya ayni paytda qo'llanayotganini va nima uchunligini bilish kerak bo'lsa, ilovani --debug parametri bilan ishga tushiring. Bu tanlangan asosiy jurnal menejerlari uchun diagnostika jurnallarini faollashtiradi va konsolda shartlar bo'yicha hisobotni chiqaradi.

Muayyan autokonfiguratsiya klasslarni o'chirish

Agar kerakmas autokonfiguratsiya klasslari qo'llanilayotganini aniqlasangiz, o'chirish uchun bu klasslarni @SpringBootApplication annotatsiyasidagi exclude atributidan foydalanishingiz mumkin, quyidagi misolda ko'rsatilganidek:

Java
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class MyApplication { } 
Kotlin
import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration @SpringBootApplication(exclude = [DataSourceAutoConfiguration::class]) class MyApplication 

Agar klass classpath da bo'lmasa, excludeName atributidan foydalanib anotatsiyada to'liq nomini ko'rsatishingiz mumkin. Agar siz @SpringBootApplication emas, balki @EnableAutoConfiguration anotatsiyasini ishlatishni afzal ko'rsangiz, exclude va excludeName funksiyalari ham mavjud bo'ladi. Nihoyat, spring.autoconfigure.exclude mulki orqali autokonfiguratsiyaning o'chirilishi kerak bo'lgan klasslar ro'yxatini boshqarishingiz mumkin.

Siz istisnolarni anotatsiya darajasida ham mulk orqali ham belgilashingiz mumkin.
Autokonfiguratsiya klasslari public bo'lsa-da, klassning yagona jamoatchilik API deb hisoblanadigan jihati klassning o'chirilib bo'lishi mumkin bo'lgan nomidir. Ushbu klasslarning amaldagi mazmuni, masalan, ichki konfiguratsiya klasslari yoki bin metodlari faqat ichki foydalanish uchun mo'ljallangan va biz ularni to'g'ridan-to'g'ri ishlatishni tavsiya qilmaymiz.

Spring Beans va bog'liqlikni kiritish

Binlaringizni va ularning bog'liqliklarini kiritishni aniqlash uchun Spring Frameworkning istalgan standart vositalaridan foydalanishingiz mumkin. Odatda, biz bog'liqliklarni biriktirish uchun konstruktor orqali bog'liqlikni kiritishni va binlarni qidirish uchun @ComponentScan annotatsiyasidan foydalanishni tavsiya qilamiz.

Agar yuqorida tavsiya qilinganidek kodingizni tuzsangiz (ilova klassini yuqori darajadagi paketda joylashtirib), unda hech qanday argumentlarsiz @ComponentScan anotatsiyasini qo'shishingiz yoki uni o'z ichiga olgan @SpringBootApplication anotatsiyasidan foydalanishingiz mumkin. Ilovangizning barcha komponentlari (ya'ni @Component, @Service, @Repository, @Controller va boshqa anotatsiyalar) avtomatik ravishda Spring binlar sifatida registratsiya qilinadi.

Quyidagi misolda @Service anotatsiyasi bilan belgilangan bin keltirilgan bo'lib, konstruktorga bog'liqlikni kiritish orqali RiskAssessor zarur binini oladi:

Java
import org.springframework.stereotype.Service; @Service public class MyAccountService implements AccountService { private final RiskAssessor riskAssessor; public MyAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... } 
Kotlin
import org.springframework.stereotype.Service @Service class MyAccountService(private val riskAssessor: RiskAssessor) : AccountService 

Agar binda bir nechta konstruktor bo'lsa, Spring qaysi birini ishlatishi kerakligini ko'rsatish uchun kerakli konstruktorni @Autowired anotatsiyasi bilan belgilang:

Java
import java.io.PrintStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyAccountService implements AccountService { private final RiskAssessor riskAssessor; private final PrintStream out; @Autowired public MyAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; this.out = System.out; } public MyAccountService(RiskAssessor riskAssessor, PrintStream out) { this.riskAssessor = riskAssessor; this.out = out; } // ... } 
Kotlin
import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import java.io.PrintStream @Service class MyAccountService : AccountService { private val riskAssessor: RiskAssessor private val out: PrintStream @Autowired constructor(riskAssessor: RiskAssessor) { this.riskAssessor = riskAssessor out = System.out } constructor(riskAssessor: RiskAssessor, out: PrintStream) { this.riskAssessor = riskAssessor this.out = out } // ... } 
Konstruktorga bog'liqlikni kiritish riskAssessor maydonini final sifatida belgilashga imkon beradi, yani uni keyinchalik o'zgartirib bo'lmaydi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION