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
, що означає, що його не можна згодом змінити.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ