JavaRush /Курсхо /All lectures for TG purposes /Конфигуратсия ва автоконфигуратсия

Конфигуратсия ва автоконфигуратсия

All lectures for TG purposes
Сатҳи , Дарс
дастрас

Spring Boot конфигуратсияро дар асоси Java авлотар медонад. Гарчанде, ки SpringApplication-ро бо XML-манбаҳо истифода бурдан мумкин аст, мо одатан тавсия медиҳем, ки манбаи асосӣ як класс бошад, ки бо @Configuration аннотатсия шуда бошад. Одатан, класс, ки методи main-ро муайян мекунад, кандидат барои нақши асосии @Configuration аст.

Дар Интернет бисёр мисолҳои конфигуратсияи Spring ҳастанд, ки бо конфигуратсияи XML истифода мешаванд. Агар мумкин аст, ҳамеша кӯшиш кунед, ки эквиваленти конфигуратсияи дар асоси Java-ро истифода баред. Ҷустуҷӯи аннотатсияҳои Enable* метавонад нуқтаи хуби оғоз бошад.

Импорт кардани классҳои иловагии конфигуратсия

Шумо набояд ҳамаи аннотатсияҳои @Configuration-ро дар як класс ҷой диҳед. Метавонед аннотатсияи @Import-ро барои ворид кардани классҳои иловагии конфигуратсия истифода баред. Ғайр аз он, шумо метавонед аннотатсияи @ComponentScan-ро барои худкори ҷамъоварии ҳамаи компонентҳои Spring, аз ҷумла классҳои бо аннотатсияи @Configuration истифода баред.

Импорт кардани конфигуратсияи XML

Агар истифодаи конфигуратсияи дар асоси XML ҳатмӣ бошад, мо тавсия медиҳем, ки бо класс, ки бо @Configuration аннотатсия шудааст, оғоз кунед. Пас шумо метавонед аннотатсияи @ImportResource-ро барои борандани файлҳои конфигуратсияи XML истифода баред.

Автоконфигуратсия

Автоконфигуратсия дар Spring Boot кӯшиш мекунад, ки барномаи Spring-и шуморо дар асоси jar-зависимияҳо худкор конфигуратсия кунад. Масалан, агар HSQLDB дар classpath-и шумо бошад, вале шумо дастӣ ҳеҷ гуна бинҳо барои пайвастшавӣ ба базаи додаҳо конфигуратсия накарда бошед, пас Spring Boot базаи додаҳои резидентиро худкор конфигуратсия мекунад.

Бояд ба таври равшан ба автоконфигуратсия розӣ шуд, аннотатсияҳои @EnableAutoConfiguration ё @SpringBootApplication-ро ба яке аз классҳои бо аннотатсияи @Configuration илова кунед.

Танҳо як аннотатсияи @SpringBootApplication ё @EnableAutoConfiguration илова кунед. Одатан, мо тавсия медиҳем, ки яке аз ин аннотатсияҳоро танҳо ба классҳои асосӣ, ки бо аннотатсияи @Configuration аннотатсия шудаанд, илова кунед.

Тағйир додани автоконфигуратсия по пай по

Автоконфигуратсия на он қадар ағрессив аст. Ҳар вақт шумо метавонед ба таъриф кардани конфигуратсияи худ шурӯъ кунед, то баъзе қисматҳои автоконфигуратсияро иваз кунед. Масалан, агар шумо бини худи худро DataSource илова кунед, пас воситаҳои кӯмаки дарунсохт барои базаи додаҳои худкор мавҷуд намешавад.

Агар лозим бошад, ки бидонед, ки кадом автоконфигуратсия ҳоло истифода бурда мешавад ва чаро, барномаро бо параметри --debug оғоз кунед. Ин ба шумо имкон медиҳад, ки журналҳои отладиро барои диспетчерҳои асосии дархостишуда фаъол созед ва гузориши шароитро ба консол бароред.

Хомӯш кардани баъзе классҳои автоконфигуратсия

Агар шумо мушоҳида кунед, ки классҳои муайяни автоконфигуратсия истифода мешаванд, ки ба шумо лозим нест, шумо метавонед атрибути истисно (exclude)-ро дар аннотатсияи @SpringBootApplication истифода баред, то онҳоро хомӯш кунед, ба мисли мисоли зерин:

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 

Агар класс дар classpath набошад, шумо метавонед атрибути excludeName-и аннотатсияро истифода баред ва ба ҷои он номи пурраро муқаррар кунед. Агар шумо аннотатсияи @EnableAutoConfiguration-ро ба ҷои @SpringBootApplication истифода бурданро афзалият диҳед, функсияҳои exclude ва excludeName низ дастрас хоҳанд буд. Ниҳоят, шумо метавонед рӯйхати классҳои истисношудаи автоконфигуратсияро бо ёрии хосияти spring.autoconfigure.exclude идора кунед.

Шумо метавонед истисноҳоро ҳам дар сатҳи аннотатсия ва ҳам бо ёрии хосият муайян кунед.
Гарчанде ки классҳои автоконфигуратсия public мебошанд, танҳо ҷиҳати класса, ки ҳамчун API-и ҷамъиятӣ ҳисобида мешавад, номи класса мебошад, ки метавонад барои хомӯш кардани автоконфигуратсия истифода шавад. Мазмуни воқеии ин классҳо, ба монанди классҳои конфигуратсияҳои дохилӣ ё методҳои бин, танҳо барои истифодаи дохилӣ пешбинӣ шудаанд ва мо истифодаи бе воситаи онҳоро тавсия намедиҳем.

Spring Beans ва воридшавии вобастагиҳо

Шумо метавонед ягон воситаи стандартии Spring Framework-ро барои таърифи бинҳои худ ва воридшавии вобастагиҳои онҳо истифода баред. Одатан, мо тавсия медиҳем, ки воридшавии вобастагиҳо тавассути конструктор барои пайвастани вобастагиҳо ва аннотатсияи @ComponentScan барои ҷустуҷӯи бинҳо истифода баред.

Агар шумо коди худро, тавре ки дар боло пешниҳод шуда буд, сохтор диҳед (классҳои барномаро дар пакети болоӣ гузоред), шумо метавонед аннотатсияи @ComponentScan-ро бидуни аргументҳо илова кунед ё аннотатсияи @SpringBootApplication-ро истифода баред, ки он ба таври ноаён онро дарбар мегирад. Ҳамаи компонентҳои барномаи шумо (аннотатсияҳои @Component, @Service, @Repository, @Controller ва дигарҳо) ба таври автоматӣ ҳамчун бинҳои Spring сабт карда мешаванд.

Дар мисоли зерин бин нишон дода шудааст, ки бо аннотатсияи @Service нишондор шудааст, ки воридшавии вобастагиҳо тавассути конструкторро истифода мебарад, то бинҳои зарурии RiskAssessor-ро гирад:

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 

Агар бин зиёда аз як конструктор дошта бошад, бояд онеро, ки Spring бояд истифода барад, бо аннотатсияи @Autowired нишон диҳед:

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 } // ... } 
Ба назар гиред, ки истифодаи воридшавии вобастагиҳо тавассути конструктор ба шумо имкон медиҳад, ки майдони riskAssessor-ро ҳамчун final нишон диҳед, ки маънои онро дорад, ки он наметавонад дар оянда тағйир ёбад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION