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