springboot自動配置原理「springboot介紹項目」

一、代碼實現

1. 創建maven工程,普通的java工程

2. 添加SpringBoot的起步依賴

SpringBoot要求,項目要繼承SpringBoot的起步依賴
spring-boot-starter-parent

     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.0.1.RELEASE</version>
     </parent>

SpringBoot要集成SpringMVC進行Controller的開發,所以項目要導入web的啟動依賴

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

3. 編寫SpringBoot引導類

引導類必須放在與controller等包同級目錄

 package com.xiaojian;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
 public class Application {
     public static void main(String[] args) {
         SpringApplication.run(Application.class);
     }
 
 }

4. 編寫Controller類

 package com.xiaojian.controller;
 ​
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 ​
 @Controller
 public class QuickController {
 ​
     @RequestMapping("/quick")
     @ResponseBody
     public String quick(){
         return "hello SpringBoot";
     }
 }

@ResponseBody 必須加上。

5. 測試

瀏覽器訪問 : localhost:8080/quick 顯示: hello SpringBoot

二、入門解析

1.SpringBoot代碼解析

  1. 所有SpringBoog工程中,都要在pom.xml添加父工程依賴(spring-boot-starter-parent),後面進行源碼分析
  2. 以功能為單位,如需要web功能在瀏覽器進行訪問,秩序添加依賴(spring-boot-starter-web)
  3. @SpringBootApplication,聲明該類是SpringBoot的引導類 run方法運行SpringBoot引導類,參數是引導類的位元組碼對象
 @SpringBootApplication
 public class Application {
     public static void main(String[] args) {
         SpringApplication.run(Application.class);
     }
 }

2.SpringBoot工程熱部署(好東西啊)

我們在開發中反覆修改類、頁面等資源,每次修改後都是需要重新啟動才生效,這樣每次啟動都很麻煩,浪費了大量的時間,我們可以在修改代碼後不重啟就能生效,在pom.xml中添加如下配置就可以實現這樣的功能,我們稱之為熱部署

 <!--熱部署配置-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
 </dependency>

ps:IDEA進行SpringBoot進行熱部署失敗的解決方案

  1. Setting -> Compiler -> Build project automatically
  2. 然後 Shift+Ctrl+Alt+/,選擇Registry,在列表中找到 compiler.automatically.allow.when.app.running 打鉤 完成

三、原理分析

1. 起步依賴原理分析(查看源碼)

  • 分析spring-boot-starter-parent spring-boot-starter-parent中也有父依賴spring-boot-starter-dependencies,從中可以看到一部分坐標的版本、依賴管理、插件管理已經定義好,所以我們的SpringBoot工程繼承spring-boot-starter-parent後已經具備版本鎖定等配置了。 所以起步依賴的作用就是進行依賴的傳遞。
  • 分析spring-boot-starter-web spring-boot-starter-web就是將web開發要使用的spring-web、spring-webmvc等坐標進行了「打包」,這樣我們的工程只要引入spring-boot-starter-web起步依賴的坐標就可以進行web開發了,同樣體現了依賴傳遞的作用。在以後需要添加的功能也是同理

2. 自動配置

@SpringBootApplication 註解 相當於配置三個註解

 @SpringBootConfiguration // 相當於 @Configuration ,配置Spring容器(@Bean,註冊bean對象,標註在返回某個實例的方法)
 @EnableAutoConfiguration // 自動配置
 @ComponentScan( // 組件掃描,掃描與引導類同級目錄包下的bean
     excludeFilters = {@Filter(
     type = FilterType.CUSTOM,
     classes = {TypeExcludeFilter.class}
 ), @Filter(
     type = FilterType.CUSTOM,
     classes = {AutoConfigurationExcludeFilter.class}
 )}
 )

介面EnableAutoConfiguration(重要)

Spring Boot | 快速入門及原理分析

@AutoConfigurationPackage

Spring Boot | 快速入門及原理分析

將主配置類(@SpringBootApplication標註的類)同級目錄下的所在包,及下面所有子包裡面的所有組件掃描到Spring容器

Spring Boot | 快速入門及原理分析

@Import註解

通過導入的方式實現把實例加入springIOC容器中

Spring Boot | 快速入門及原理分析

AutoConfigurationImportSelector:

導入哪些組件的選擇器

將所有需要導入的組件以全類名的方式返回;這些組件被添加到容器中。

會給容器中導入非常多的自動配置類(xxxAutoConfiguration);

就是給容器中導入這個場景需要的所有組件,並配置好這些組件。

在該類中獲取全類名的方法中,調用
getCandidateConfigurations( … )

Spring Boot | 快速入門及原理分析

loadFactoryNames( … ) ,使用類載入器載入目標位置的資源(也就是需要導入的組件全類名),並存入Properties中返回

Spring Boot | 快速入門及原理分析

自動導入組件全過程圖解:

SpringBoot 在啟動的時候,從springboot的autoconfigure包的類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值(組件全類名),將這些值作為自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作。

以前我們需要自己配置的東西,自動配置類幫我們做了(對比SSM中的各大配置屬性)

Spring Boot | 快速入門及原理分析

四、SpringBoot項目目錄結構

resources文件夾

  • static:保存所有靜態資源,js,css,images;
  • templates:保存所有的模板頁面;(Spring Boot默認jar包使用嵌入式的Tomcat,默認不支持jsp頁面),可以使用模板引擎(freemarker,thymeleaf)
  • application.properties:Spring Boot應用的配置文件;springboot自動配置原理

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/274774.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:16
下一篇 2024-12-17 14:16

相關推薦

發表回復

登錄後才能評論