Spring Boot сильно привлекает к себе разработчиков из-за следующих трех основных особенностей:
- Автоконфигурация — например, проверка зависимостей, наличие определенных классов в пути к классам, существование bean-компонента или активация некоторого свойства.
- Самостоятельный подход к настройке.
- Возможность создания автономных приложений.
Содержание
Автоконфигурация в Spring Boot
- @Conditional аннотация действует как основа для расширений аннотаций автоконфигурации Spring Boot.
- Он автоматически регистрирует bean-компоненты с помощью @Component, @Configuration, @Bean и мета-аннотаций для создания пользовательских аннотаций стереотипов и т. д.
- Аннотация @EnableAutoConfiguration используется для включения функции автоматической настройки.
- Аннотация @EnableAutoConfiguration включает автоматическую настройку Spring ApplicationContext путем сканирования компонентов пути к классам и регистрации компонентов.
- Эта аннотация заключена в аннотацию @SpringBootApplication вместе с аннотациями @ComponentScan и @SpringBootConfiguration.
- При запуске метода main() эта аннотация инициирует автоматическую настройку.
Реализация: начальная загрузка приложения
// Java Program to Illustrate Bootstrapping of Application
package
gfg;
// Importing required classes
import
org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication;
// Annotation
@SpringBootApplication
// Class
public
class
GfgApplication {
// Main driver method
public
static
void
main(String[] args)
{
SpringApplication.run(GfgApplication.
class
, args);
}
}
Примечание. Вы должны использовать аннотацию @EnableAutoConfiguration только один раз в своем приложении.
- «spring-boot-autoconfigure.jar» — это файл, который следит за всей автоматической настройкой.
- Вся логика автоматической настройки для MVC, данных, JMS и других фреймворков находится в одном jar-файле.
Работа автоконфигурации в Spring Boot
А: Зависимости
- Автоконфигурация является основным направлением разработки Spring Boot.
- Нашему приложению Spring для работы требуется соответствующий набор зависимостей.
- Spring Boot автоматически настраивает предварительно установленные необходимые зависимости без необходимости настраивать их вручную.
- Это очень помогает и может быть замечено, когда мы хотим создать автономное приложение.
- Когда мы создаем наше приложение, Spring Boot следит за нашими зависимостями и настраивает как базовую среду Spring Framework, так и необходимые зависимости jar (сторонние библиотеки) в пути к классам в соответствии с нашим построенным проектом.
- Это помогает нам избежать ошибок, таких как несоответствие или несовместимость версий разных библиотек.
- Если вы хотите переопределить эти значения по умолчанию, вы можете переопределить их после инициализации.
Инструмент: Maven
Пример 1: pom.xml
XML
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>4.0.0</
modelVersion
>
<
parent
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-parent</
artifactId
>
<
version
>2.5.6</
version
>
<
relativePath
/>
<!-- lookup parent from repository -->
</
parent
>
<
groupId
>sia</
groupId
>
<
artifactId
>taco-cloud</
artifactId
>
<
version
>0.0.1-SNAPSHOT</
version
>
<
name
>taco-cloud</
name
>
<
description
>Demo project for Spring Boot</
description
>
<
properties
>
<
java.version
>11</
java.version
>
<
vaadin.version
>14.7.5</
vaadin.version
>
</
properties
>
<
dependencies
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-thymeleaf</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-web</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-devtools</
artifactId
>
<
scope
>runtime</
scope
>
<
optional
>true</
optional
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-test</
artifactId
>
<
scope
>test</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-jersey</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-web-services</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-webflux</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>com.vaadin</
groupId
>
<
artifactId
>vaadin-spring-boot-starter</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>io.projectreactor</
groupId
>
<
artifactId
>reactor-test</
artifactId
>
<
scope
>test</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.projectlombok</
groupId
>
<
artifactId
>lombok</
artifactId
>
<
optional
>true</
optional
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-data-jdbc</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-jdbc</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>com.h2database</
groupId
>
<
artifactId
>h2</
artifactId
>
<
scope
>runtime</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-data-jpa</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-security</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.security</
groupId
>
<
artifactId
>spring-security-test</
artifactId
>
<
scope
>test</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>mysql</
groupId
>
<
artifactId
>mysql-connector-java</
artifactId
>
<
scope
>runtime</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-hateoas</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-data-rest</
artifactId
>
</
dependency
>
</
dependencies
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-maven-plugin</
artifactId
>
<
configuration
>
<
excludes
>
<
exclude
>
<
groupId
>org.projectlombok</
groupId
>
<
artifactId
>lombok</
artifactId
>
</
exclude
>
</
excludes
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
<
dependencyManagement
>
<
dependencies
>
<
dependency
>
<
groupId
>com.vaadin</
groupId
>
<
artifactId
>vaadin-bom</
artifactId
>
<
version
>${vaadin.version}</
version
>
<
type
>pom</
type
>
<
scope
>import</
scope
>
</
dependency
>
</
dependencies
>
</
dependencyManagement
>
<
profiles
>
<
profile
>
<
id
>production</
id
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>com.vaadin</
groupId
>
<
artifactId
>vaadin-maven-plugin</
artifactId
>
<
version
>${vaadin.version}</
version
>
<
executions
>
<
execution
>
<
id
>frontend</
id
>
<
phase
>compile</
phase
>
<
goals
>
<
goal
>prepare-frontend</
goal
>
<
goal
>build-frontend</
goal
>
</
goals
>
<
configuration
>
<
productionMode
>true</
productionMode
>
</
configuration
>
</
execution
>
</
executions
>
</
plugin
>
</
plugins
>
</
build
>
</
profile
>
</
profiles
>
</
project
>
Понимание автоматической настройки зависимостей
- Когда вы создаете проект Spring Boot, зависимость «Starter Parent» автоматически добавляется в файл «pom.xml».
- Он уведомляет, что основные «разумные» значения по умолчанию для приложения были автоматически настроены, и поэтому вы можете воспользоваться этим.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>...</version> </parent>
- Чтобы добавить зависимость (библиотеку технических стеков), вам не нужно указывать ее версию, потому что Spring Boot автоматически настраивает ее для вас.
- Кроме того, при обновлении/изменении версии Spring Boot все версии добавленных зависимостей также будут обновлены/изменены.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
- Именно автоматическая настройка Spring Boot делает управление зависимостями чрезвычайно простым для нас.
- С помощью включения «ведения журнала отладки» в файле «application.properties» мы можем узнать больше об автоматической настройке.
logging.level.org.springframework: DEBUG
Инструмент B: Gradle
Пример 2: build.gradle
buildscript { repositories { jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.8.RELEASE") } } apply plugin: 'java' apply plugin: 'spring-boot' repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }
B: Весеннее приложение
Illustration: Class
- @Bean — это аннотация уровня метода.
- Аннотация @Bean указывает, что метод создает возвращаемое значение, зарегистрированное как bean-компонент (данные) с помощью BeanFactory, управляемого Spring Container.
- Эта конкретная программа Java использует аннотацию @Configuration, указывающую, что класс содержит одну или несколько аннотаций @Bean, которые помогают автоматически регистрироваться (инициализировать) в контейнере Spring (контекст приложения Spring).
- @Configuration — это аннотация на уровне класса.
Пример
// Java Program Illustrating Configuration of
// DataSourceConfiguration of DataSource
package
gfg;
// Importing required classes
import
javax.sql.DataSource;
import
org.springframework.boot.jdbc.DataSourceBuilder;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
// Annotation
@Configuration
// Class
public
class
ConfigDataSource {
// Annotation
@Bean
public
static
DataSource source()
{
DataSourceBuilder<?> dSB
= DataSourceBuilder.create();
dSB.driverClassName(
"com.mysql.jdbc.Driver"
);
// MySQL specific url with database name
// MySQL username credential
dSB.username(
"user"
);
// MySQL password credential
dSB.password(
"password"
);
// builds and returns a new
// configured datasource object
return
dSB.build();
}
}
Примечание. Функция автоматической настройки платформы Java Spring Boot позволяет быстро приступить к разработке приложений на основе Spring и снижает вероятность человеческих ошибок.