English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot 自动装配

SpringBoot configura automaticamente l'applicazione SpringBoot in base alle dipendenze JAR aggiunte.

Ad esempio, se esiste un JAR di database H2 nella classpath e non abbiamo configurato manualmente alcun bean relativo al database, la funzione di configurazione automatica di Spring Boot lo configurerà automaticamente nel progetto.

Possiamo abilitare l'automatico utilizzando l'annotazione @EnableAutoConfiguration funzionalità di configurazione. Tuttavia, questa annotazione non viene utilizzata perché è racchiusa in @SpringBootApplication nelle annotazioni. L'annotazione @SpringBootApplication è una combinazione di tre annotazioni: @ComponentScan, @EnableAutoConfiguration,e @Configuration 。Ma, usiamo @SpringBootApplication anziché @EnableAutoConfiguration.

@SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @Configuration

Quando si aggiunge Utilizzando spring-boot-starter-web nel progetto Quando si aggiunge la dipendenza, Spring Boot configura automaticamente Spring MVC nella classpath. Configura automaticamente dispatcherServlet ,di default Pagina di erroree Barile di rete

Analogamente, quando aggiungiamo la dipendenza spring-boot-starter-data-jpa, vediamo che Spring Boot configura automaticamente fonte datie gestore delle entità

Tutta la logica di configurazione automatica è in spring-boot-autoconfigure.jar come illustrato nella figura sottostante.

che deve essere configurato automaticamente

Un'applicazione basata su Spring richiede molte configurazioni. Quando si utilizza Spring MVC, dobbiamo configurare dispatcher servlet, resolver delle viste, Web jars Ecco un esempio di configurazione tipica del servlet dispatcher in un'applicazione web:

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/todo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

Analogamente, quando utilizziamo Hibernate/JPA, dobbiamo configurare il fonte dati, il gestore delle transazioni, la fabbrica degli oggetti entità, ecc.

Configurazione del fonte dati

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:config/schema.sql"/>
<jdbc:script location="classpath:config/data.sql"/>
</jdbc:initialize-database>

配置实体管理器工厂

<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory"
<property name="persistenceUnitName" value="hsql_pu"/>
<property name="dataSource" ref="dataSource"/>
</bean>

配置事务管理器

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

禁用自动配置类

如果我们不想被应用,我们还可以禁用特定的自动配置类。我们使用注解@EnableAutoConfiguration的 exclude 属性来禁用自动配置类。例如:

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration 
{
}

如果类不在类路径中,我们可以使用@EnableAutoConfiguration批注的属性 excludeName 并指定类的 qualified 名称。我们可以使用属性 spring.autoconfigure.exclude 排除任何数量的自动配置类。

Spring Boot自动配置示例

在以下示例中,我们将看到Spring Boot的自动配置功能如何工作。

步骤1: 打开spring Initializr https://start.spring.io/。

第2步: 名称。我们提供了 com.w3codebox

步骤3: 提供 工件 ID。我们提供了 spring-boot-autoconfiguration-example

步骤4: 添加依赖项: Spring Web,Spring Data JPA,一个 H2数据库

步骤5: 单击 Generate (生成)按钮。当我们单击"生成"按钮时,它会将项目包装在 Jar 文件中,并将其下载到本地系统。

第6步: 提取 Jar文件并将其粘贴到STS工作区中。

步骤7: 将项目文件夹导入STS。

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-autoconfiguration-example->完成

导入需要一些时间。

Passaggio 8: 在目录中创建名称为 com.w3codebox.controller 的程序包。文件夹 src/main/java

Passaggio 9: 在包中创建名称为 ControllerDemo 的Controller类。 <strong>com.w3codebox.controller。</strong>

ControllerDemo.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo 
{
    @RequestMapping("/")
    public String home()
    {
        return "home.jsp";
    }
}

Passaggio 10: nella cartella src/main/java crea un altro chiamato com.w3codebox.model del pacchetto. p>

步骤11: nel pacchetto   com.w3codebox.model crea un nome chiamato   User la classe.

User.java

package com.w3codebox.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="userdata")
public class User 
{
    @Id
    private int id;
    private String username;
    public int getId() 
    {
        return id;
    }
    public void setId(int id) 
    {
        this.id = id;
    }
    public String getUname() 
    {
        return username;
    }
    public void setUname(String username) 
    {
        this.username = username;
    }
    @Override
    public String toString() 
    {
        return "User [id=", + id + ", uname=", + username + "]";
    }
}
 

Ora, dobbiamo configurare il database H2.

步骤12: 打开   application.properties crea un file e configura il seguente contenuto:  porta, abilita la console H2, sorgente dati,e   URL.

application.properties

server.port=8085
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:w3codebox
 

Passaggio 13: nella cartella   crea uno in src/main/resources SQL 文件。

clicca con il tasto destro sulla cartella src/main/resources -> Nuovo -> File -> Fornisci il nome del file -> Completa

abbiamo fornito il nome del file   data.sql ecco i dati da inserire.

data.sql

insert into userdata values(101, 'Tom');
insert into userdata values(102, 'Andrew');
insert into userdata values(103,'Tony');
insert into userdata values(104,'Bob');
insert into userdata values(105,'Sam');
 

Passaggio 14: in   src crea una cartella chiamata   webapp cartella.

Passaggio 15: utilizzando il folder   ControllerDemo crea un file JSP utilizzando il nome restituito in   home.jsp

home.jsp

<%@page language="java" contentType="text/html; charset=ISO-8859-1" %>
pageEncoding="ISO-8859-1">
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Inserisci titolo qui</title>
</head>
<body>
<form action="addUser">
ID:<br/>
<input type="text" name="t1"><br/>
Nome utente:<br/>
<input type="text" name="t2"><br/>
<input type="submit" value="Aggiungi">
</form>
</body>
</html>
 

Passaggio 16: Esegui   SpringBootAutoconfigurationExampleApplication.java vedere nel terminale che la nostra applicazione è stata eseguita con successo sulla porta   8085 in esecuzione.

Passaggio 17: Apri il browser e chiama l'URL   http: //localhost: 8085/h2-console/. Mostra i dati che abbiamo definito in   application.properties configurato nel file  classe del driver,   JDBC URL , e il nome utente predefinito   sa

Possiamo anche testare la connessione cliccando su  testa la connessionepulsante. Se la connessione è riuscita, viene visualizzato il messaggio  testo di successo.

Passaggio 18: 单击  connessionepulsante. Mostra la tabella definita nel file User.java   userdata struttura.

Passaggio 19: Esegui la seguente query per visualizzare i dati che abbiamo inserito   data.sql 文件中的数据

SELECT * FROM USERDATA;
 

让我们仔细看一下控制台。我们看到   TransactionManagement,DispatcherServlet,EntityManagerFactory,e   DataSource 会自动配置,如下图所示。

调试自动配置

我们可以通过以下方法找到有关自动配置的更多信息: 使用以下两种方式:

打开调试日志记录 使用Spring Boot执行器

打开调试日志记录

我们可以通过在   application.properties 中添加属性来调试日志记录文件。让我们在上面的示例中实现调试日志记录。打开   application.properties 文件并添加以下属性:

logging.level.org.springframework: DEBUG
 

现在重新启动应用程序。我们看到在日志中打印了一个自动配置报告。该报告包括所有自动配置的类。分为两部分:  正向匹配e  负向匹配,如下图所示。

正向匹配

否定匹配

Spring Boot执行器

我们还可以通过在项目中使用   Actuator 调试自动配置。我们还将添加   HAL浏览器,以简化操作。

让我们创建一个Spring Boot Actuator示例。

步骤1: 打开Spring Initializr http://start.spring.io 。

步骤2: 提供  名称。我们提供了   com.w3codebox。

步骤3: 提供  工件 ID。我们提供了  执行器自动配置示例。

步骤4: 添加依赖项:   Spring Web e   Spring Boot Actuator。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 

步骤5: 单击   Generate (生成)按钮。它将与项目相关的所有规范绑定到一个   jar 文件中,并将其下载到我们的本地系统中。

步骤6: 提取下载的jar文件。

步骤7: 使用以下步骤导入项目文件夹:

文件->导入->现有Maven项目->下一步->浏览->选择项目文件夹->完成

Dopo aver importato il progetto, possiamo vedere nel nostro IDE il seguente.   Package Explorer Nella sezione vediamo la seguente struttura dei directory.

Passaggio 8: Creiamo una classe Controller nel pacchetto   com.w3codebox。Creiamo una classe chiamata   DemoRestController.

Nel Controller, abbiamo definito una classe controller chiamata   hello( ), restituisce una stringa.

DemoRestController.java

package com.w3codebox;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoRestController 
{
    @GetMapping("/hello")
    public String hello() 
    {
        return "Hello User, have a nice day.";
    }
}
 

Passaggio 9: Esegui   ActuatorAutoConfigurationExampleApplication.java 文件。

Passaggio 10: Apri il browser e chiama l'URL   http: //localhost: 8080/hello .Restituisce la stringa specificata nel controller.

Ora chiamiamo l'URL dell'esecutore   http: //localhost: 8080/actuator .Lancia l'esecutore che visualizza i seguenti tre URL:   self ,   health e   info come mostrato di seguito.

{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":false}}}
 

步骤11: 打开   pom.xml 文件并添加   HAL浏览器依赖项。

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
 

步骤12: 再次,运行   ActuatorAutoConfigurationExampleApplication.java 文件。

要访问HAL浏览器,请输入   http://localhost:8080 在浏览器中,然后按Enter键。

现在我们可以通过HAL浏览器访问执行器。

在资源管理器的文本框中输入  /actuator ,然后点击   Go 按钮。

它显示了与执行器相关的内容。执行器中最重要的是   beans

当我们点击bean的箭头时,它会显示所有

上图显示了所有自动配置的   beans 的详细信息。