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
, что означает, что его нельзя впоследствии изменить.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ