Spring Boot — автоматическая настройка

ика автоматической настройки для MVC Изучение

Spring Boot сильно привлекает к себе разработчиков из-за следующих трех основных особенностей:

  1. Автоконфигурация — например, проверка зависимостей, наличие определенных классов в пути к классам, существование bean-компонента или активация некоторого свойства.
  2. Самостоятельный подход к настройке.
  3. Возможность создания автономных приложений.

Автоконфигурация в 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-файле.

ика автоматической настройки для MVC

Работа автоконфигурации в Spring Boot

А: Зависимости

  • Автоконфигурация является основным направлением разработки Spring Boot.
  • Нашему приложению Spring для работы требуется соответствующий набор зависимостей.
  • Spring Boot автоматически настраивает предварительно установленные необходимые зависимости без необходимости настраивать их вручную.
  • Это очень помогает и может быть замечено, когда мы хотим создать автономное приложение.
  • Когда мы создаем наше приложение, Spring Boot следит за нашими зависимостями и настраивает как базовую среду Spring Framework, так и необходимые зависимости jar (сторонние библиотеки) в пути к классам в соответствии с нашим построенным проектом.
  • Это помогает нам избежать ошибок, таких как несоответствие или несовместимость версий разных библиотек.
  • Если вы хотите переопределить эти значения по умолчанию, вы можете переопределить их после инициализации.

Инструмент: Maven

Пример 1: pom.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <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

Читайте также:  Примеры команды «diff» в Linux

Пример 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
        dSB.url("jdbc:mysql://localhost:3306/userdetails");
 
        // 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 и снижает вероятность человеческих ошибок.

Оцените статью
bestprogrammer.ru
Добавить комментарий