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.
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.
@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:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class MyApplication { }
@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.
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:
@Service public class MyAccountService implements AccountService { private final RiskAssessor riskAssessor; public MyAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
@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:
@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; } // ... }
@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 } // ... }
riskAssessor maydonini
final sifatida belgilashga imkon beradi, yani uni keyinchalik o'zgartirib bo'lmaydi.
GO TO FULL VERSION