Spring Boot конфигуратсияро дар асоси Java авлотар медонад. Гарчанде, ки SpringApplication
-ро бо XML-манбаҳо истифода бурдан мумкин аст, мо одатан тавсия медиҳем, ки манбаи асосӣ як класс бошад, ки бо @Configuration
аннотатсия шуда бошад. Одатан, класс, ки методи main
-ро муайян мекунад, кандидат барои нақши асосии @Configuration
аст.
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
истифода баред, то онҳоро хомӯш кунед, ба мисли мисоли зерин:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class MyApplication { }
@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
-ро гирад:
@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
Агар бин зиёда аз як конструктор дошта бошад, бояд онеро, ки Spring бояд истифода барад, бо аннотатсияи @Autowired
нишон диҳед:
@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
-ро ҳамчун
final
нишон диҳед, ки маънои онро дорад, ки он наметавонад дар оянда тағйир ёбад.
GO TO FULL VERSION