SpringBoot 自動(dòng)裝配

SpringBoot自動(dòng)配置根據(jù)我們添加的jar依賴項(xiàng)自動(dòng)配置SpringBoot應(yīng)用程序。

例如,如果類路徑中存在H2數(shù)據(jù)庫Jar,而我們尚未手動(dòng)配置任何與數(shù)據(jù)庫相關(guān)的bean,則Spring Boot的自動(dòng)配置功能會(huì)在項(xiàng)目中自動(dòng)對(duì)其進(jìn)行配置。

我們可以啟用自動(dòng)通過使用注解 @EnableAutoConfiguration 配置功能。但是此注解不使用,因?yàn)樗b在 @SpringBootApplication 注解內(nèi)。注解@SpringBootApplication是三個(gè)注解的組合: @ComponentScan,@EnableAutoConfiguration, @Configuration 。但是,我們使用@SpringBootApplication批注而不是使用@EnableAutoConfiguration。

@SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @Configuration

當(dāng)添加 在項(xiàng)目中使用spring-boot-starter-web 依賴項(xiàng)時(shí),Spring Boot自動(dòng)配置會(huì)在類路徑中查找Spring MVC。它會(huì)自動(dòng)配置 dispatcherServlet ,默認(rèn)的 錯(cuò)誤頁面網(wǎng)絡(luò)罐子。

類似地,當(dāng)我們添加spring-boot-starter-data-jpa 依賴關(guān)系,我們看到Spring Boot自動(dòng)配置會(huì)自動(dòng)配置 數(shù)據(jù)源實(shí)體管理器。

所有自動(dòng)配置邏輯都在 spring-boot-autoconfigure.jar 中實(shí)現(xiàn),如下圖所示。

Spring Boot自動(dòng)配置

需要自動(dòng)配置

基于Spring的應(yīng)用程序需要很多配置。使用Spring MVC時(shí),我們需要配置 dispatcher servlet,視圖解析器,Web jars 。以下代碼顯示了Web應(yīng)用程序中調(diào)度程序servlet的典型配置:

<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>

類似地,當(dāng)我們使用Hibernate/JPA時(shí),我們需要配置數(shù)據(jù)源,事務(wù)管理器,實(shí)體管理器工廠等等。

配置數(shù)據(jù)源

<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>

配置實(shí)體管理器工廠

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

配置事務(wù)管理器

<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"/>

禁用自動(dòng)配置類

如果我們不想被應(yīng)用,我們還可以禁用特定的自動(dòng)配置類。我們使用注解@EnableAutoConfiguration的 exclude 屬性來禁用自動(dòng)配置類。例如:

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 排除任何數(shù)量的自動(dòng)配置類。

Spring Boot自動(dòng)配置示例

在以下示例中,我們將看到Spring Boot的自動(dòng)配置功能如何工作。

步驟1: 打開spring Initializr https://start.spring.io/。

第2步: 名稱。我們提供了 com.nhooo 。

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

步驟4: 添加依賴項(xiàng): Spring Web,Spring Data JPA,一個(gè) H2數(shù)據(jù)庫。

步驟5: 單擊 Generate (生成)按鈕。當(dāng)我們單擊"生成"按鈕時(shí),它會(huì)將項(xiàng)目包裝在 Jar 文件中,并將其下載到本地系統(tǒng)。

Spring Boot自動(dòng)配置

第6步: 提取 Jar文件并將其粘貼到STS工作區(qū)中。

步驟7: 將項(xiàng)目文件夾導(dǎo)入STS。

文件->導(dǎo)入->現(xiàn)有Maven項(xiàng)目->瀏覽->選擇文件夾spring-boot-autoconfiguration-example->完成

導(dǎo)入需要一些時(shí)間。

步驟8: 在目錄中創(chuàng)建名稱為 com.nhooo.controller 的程序包。文件夾 src/main/java 。

步驟9: 在包中創(chuàng)建名稱為 ControllerDemo 的Controller類。 strong> com.nhooo.controller 。

ControllerDemo.java

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

步驟10: 在文件夾 src/main/java 中創(chuàng)建另一個(gè)名為 com.nhooo.model 的包。 p>

步驟11: 在包   com.nhooo.model 中創(chuàng)建一個(gè)名稱為   User 的類。

User.java

package com.nhooo.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 + "]";
    }
}
 

現(xiàn)在,我們需要配置H2數(shù)據(jù)庫。

步驟12: 打開   application.properties 文件并配置以下內(nèi)容:  端口,啟用H2控制臺(tái),數(shù)據(jù)源,和   URL。

application.properties

server.port=8085
spring.h2.console.enabled=true
spring.datasource.plateform=h2
spring.datasource.url=jdbc:h2:mem:nhooo
 

步驟13: 在文件夾   src/main/resources中創(chuàng)建一個(gè) SQL 文件。

右鍵單擊src/main/resources文件夾->新建->文件->提供文件名->完成

我們提供了文件名   data.sql 并將以下數(shù)據(jù)插入其中。

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');
 

步驟14: 在   src 文件夾中創(chuàng)建一個(gè)名稱為   webapp 的文件夾。

步驟15: 使用我們?cè)?  ControllerDemo 中返回的名稱創(chuàng)建一個(gè)JSP文件。在ControllerDemo.java中,我們返回了   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>Insert title here</title>
</head>
<body>
<form action="addUser">
ID :<br />
<input type="text" name="t1"><br />
User name :<br />
<input type="text" name="t2"><br />
<input type="submit" value="Add">
</form>
</body>
</html>
 

步驟16: 運(yùn)行   SpringBootAutoconfigurationExampleApplication.java 文件。我們可以在控制臺(tái)中看到我們的應(yīng)用程序已成功在端口   8085 上運(yùn)行。

Spring Boot自動(dòng)配置

步驟17: 打開瀏覽器并調(diào)用URL   http: //localhost: 8085/h2-console/。它顯示了我們?cè)?  application.properties 文件中配置的  驅(qū)動(dòng)程序類,   JDBC URL ,以及默認(rèn)的用戶名   sa

Spring Boot自動(dòng)配置

我們還可以通過以下方式測(cè)試連接點(diǎn)擊  測(cè)試連接按鈕。如果連接成功,則顯示消息  測(cè)試成功。

步驟18: 單擊  連接按鈕。它顯示了我們?cè)赨ser.java文件中定義的表   userdata 的結(jié)構(gòu)。

Spring Boot自動(dòng)配置

步驟19: 執(zhí)行以下查詢,以查看我們已插入   data.sql 文件中的數(shù)據(jù)

SELECT * FROM USERDATA;
 
Spring Boot自動(dòng)配置

讓我們仔細(xì)看一下控制臺(tái)。我們看到   TransactionManagement,DispatcherServlet,EntityManagerFactory,和   DataSource 會(huì)自動(dòng)配置,如下圖所示。

Spring Boot自動(dòng)配置

調(diào)試自動(dòng)配置

我們可以通過以下方法找到有關(guān)自動(dòng)配置的更多信息: 使用以下兩種方式:

打開調(diào)試日志記錄 使用Spring Boot執(zhí)行器

打開調(diào)試日志記錄

我們可以通過在   application.properties 中添加屬性來調(diào)試日志記錄文件。讓我們?cè)谏厦娴氖纠袑?shí)現(xiàn)調(diào)試日志記錄。打開   application.properties 文件并添加以下屬性:

logging.level.org.springframework: DEBUG
 

現(xiàn)在重新啟動(dòng)應(yīng)用程序。我們看到在日志中打印了一個(gè)自動(dòng)配置報(bào)告。該報(bào)告包括所有自動(dòng)配置的類。分為兩部分:  正向匹配和  負(fù)向匹配,如下圖所示。

正向匹配

Spring Boot自動(dòng)配置

否定匹配

Spring Boot自動(dòng)配置

Spring Boot執(zhí)行器

我們還可以通過在項(xiàng)目中使用   Actuator 調(diào)試自動(dòng)配置。我們還將添加   HAL瀏覽器,以簡(jiǎn)化操作。

讓我們創(chuàng)建一個(gè)Spring Boot Actuator示例。

步驟1: 打開Spring Initializr http://start.spring.io 。

步驟2: 提供  名稱。我們提供了   com.nhooo。

步驟3: 提供  工件 ID。我們提供了  執(zhí)行器自動(dòng)配置示例。

步驟4: 添加依賴項(xiàng):   Spring Web 和   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 (生成)按鈕。它將與項(xiàng)目相關(guān)的所有規(guī)范綁定到一個(gè)   jar 文件中,并將其下載到我們的本地系統(tǒng)中。

步驟6: 提取下載的jar文件。

步驟7: 使用以下步驟導(dǎo)入項(xiàng)目文件夾:

文件->導(dǎo)入->現(xiàn)有Maven項(xiàng)目->下一步->瀏覽- >選擇項(xiàng)目文件夾->完成

導(dǎo)入項(xiàng)目后,我們可以在IDE的   Package Explorer 部分中看到以下目錄結(jié)構(gòu)。

Spring Boot自動(dòng)配置

步驟8: 在包中創(chuàng)建Controller類   com.nhooo。我們創(chuàng)建了一個(gè)名為   DemoRestController的控制器類。

在Controller中,我們定義了一個(gè)名為   hello( ),它返回一個(gè)字符串。

DemoRestController.java

package com.nhooo;
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.";
    }
}
 

步驟9: 運(yùn)行   ActuatorAutoConfigurationExampleApplication.java 文件。

步驟10: 打開瀏覽器并調(diào)用URL   http: //localhost: 8080/hello 。它返回我們?cè)诳刂破髦兄付ǖ淖址?/p>Spring Boot自動(dòng)配置

現(xiàn)在調(diào)用執(zhí)行器URL   http: //localhost: 8080/actuator 。它將啟動(dòng)顯示以下三個(gè)URL的執(zhí)行器:   self ,   health 和   info ,如下所示。

{"_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瀏覽器依賴項(xiàng)。

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

步驟12: 再次,運(yùn)行   ActuatorAutoConfigurationExampleApplication.java 文件。

要訪問HAL瀏覽器,請(qǐng)鍵入   http://localhost:8080 在瀏覽器中,然后按Enter鍵。

Spring Boot Auto-配置

現(xiàn)在我們可以通過HAL瀏覽器訪問執(zhí)行器。

在資源管理器的文本框中鍵入  /actuator ,然后單擊   Go >按鈕。

Spring Boot自動(dòng)配置

它顯示了與執(zhí)行器。執(zhí)行器中最重要的是   beans

Spring Boot自動(dòng)配置

當(dāng)我們單擊bean的箭頭時(shí),它會(huì)顯示所有

Spring Boot自動(dòng)配置

以上該圖顯示了所有自動(dòng)配置的   beans 的詳細(xì)信息。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清