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