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