SpringBoot系列三:SpringBoot基本概念(統一父 pom 管理、SpringBoot 代碼測試、啟動注解分析、配置訪問路徑、使用內置對象、項目打包發布)


聲明:本文來源於MLDN培訓視頻的課堂筆記,寫在這里只是為了方便查閱。

1.了解SpringBoot的基本概念

2、具體內容 在之前所建立的 SpringBoot 項目只是根據官方文檔實現的一個基礎程序模型,但是這樣的代碼肯定不適合於實際的項目開發, 因為從實際的 Maven 項目來講,應該要有統一的父 pom.xml 文件。

2.1、統一父 pom 管理

1、 首先建立一個 microboot 的 Maven 項目;

 1 <!--建立統一的父pom ,其他的子模塊都統一用這個配置 -->
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>cn.study</groupId>
 6     <artifactId>microboot</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <!--packaging設置為pom  -->
 9     <packaging>pom</packaging>
10     <name>microboot</name>
11     <url>http://maven.apache.org</url>
12     <properties>
13         <jdk.version>1.8</jdk.version>
14         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15     </properties>
16     <dependencyManagement>
17         <dependencies>
18             <dependency>
19                 <groupId>org.springframework.boot</groupId>
20                 <artifactId>spring-boot-dependencies</artifactId>
21                 <version>1.5.4.RELEASE</version>
22                 <!--設置type和scope  -->
23                 <type>pom</type>
24                 <scope>import</scope>
25             </dependency> 
26         </dependencies>
27     </dependencyManagement>
28     <build>
29         <finalName>microboot</finalName>
30         <plugins>
31             <plugin>
32                 <groupId>org.apache.maven.plugins</groupId>
33                 <artifactId>maven-compiler-plugin</artifactId>
34                 <configuration>
35                     <source>${jdk.version}</source><!-- 源代碼使用的開發版本 -->
36                     <target>${jdk.version}</target><!-- 需要生成的目標class文件的編譯版本 -->
37                     <encode>${project.build.sourceEncoding}</encode>
38                 </configuration>
39             </plugin>
40         </plugins>
41     </build>
42     <!--子模塊  -->
43     <modules>
44         <module>microboot-base</module>
45     </modules>
46 </project>

2、 建立 microboot-base 的子模塊,實現之前同樣的基礎操作功能,修改 pom.xml 文件,追加 SpringBoot 的 WEB 啟動包(spring-boot-starter-web)

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <!--引用父配置microboot  -->
    <parent>
        <groupId>cn.study</groupId>
        <artifactId>microboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>microboot-base</artifactId>
    <name>microboot-base</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        
    </dependencies>
</project> 

3、 建立與之前同樣的程序類;

package cn.study.microboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class SampleController {
    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "www.study.cn";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

在這樣的狀態下才可以進行后續的代碼編寫。

2.2、SpringBoot 代碼測試

現在的程序里面已經實現了一個最為簡單的控制器程序類,不過從實際的項目角度來講,必須要求考慮到代碼測試問題,而 且現在的程序代碼屬於 SpringBoot,則需要在你的項目之中進行如下的 pom.xml 文件的變更。

1、 【microboot-base 模塊】修改 pom.xml 配置文件,追加 SpringBoot 測試支持類;

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

只要進行 java 測試,最簡單實用的就是 junit,所以這個開發包一定要隨測試一起導入。 2、 【microboot-base 模塊】建立一個測試程序類;

2、 【microboot-base 模塊】建立一個測試程序類;

 1 package cn.study.microboot.test;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.junit.Test;
 6 import org.junit.runner.RunWith;
 7 import org.springframework.boot.test.context.SpringBootTest;
 8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 9 import org.springframework.test.context.web.WebAppConfiguration;
10 
11 import cn.study.microboot.SampleController;
12 import junit.framework.TestCase;
13 
14 @SpringBootTest(classes = SampleController.class)
15 @RunWith(SpringJUnit4ClassRunner.class)
16 @WebAppConfiguration
17 public class TestSampleController {
18     @Resource
19     private SampleController sampleController;
20 
21     @Test
22     public void testHome() {
23         TestCase.assertEquals(this.sampleController.home(), "www.study.cn");
24     }
25 }

2.3、Spring 啟動注解分析

現在為止已經可以發現在整個 SpringBoot 程序里面使用了許多的注解,首先把這些注解做一個列表:

可以發現在給定的幾個注解之中“@EnableAutoConfiguration”為整個 SpringBoot 的啟動注解配置,也就是說這個注解應該隨着程序的主類一起進行定義。

而對於控制器程序類,由於在項目之中會有許多的控制器,那么最好將這些類統一保存在一個包中,下面將所有的控制器程序類保存在“cn.study.microboot.controller”,是“cn.study.microboot”子包。

強烈建議(Spring 官方建議):如果要想進行簡單方便的開發,所有的程序類一定要在啟動類所在包的子包下。

 1、 【microboot-base 模塊】建立一個 cn.study.microboot.controller.HelloController 程序類;

 1 package cn.study.microboot.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.ResponseBody;
 6 
 7 @Controller
 8 public class HelloController {
 9     @RequestMapping("/")
10     @ResponseBody
11     public String home() {
12         return "www.study.cn";
13     }
14 }

 2、 【microboot-base 模塊】啟動程序主類;

package cn.study.microboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan("cn.study.microboot") // 定義一個掃描路徑
public class SampleController {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

 3、 【microboot-base 模塊】以上的做法只是傳統程序的開發做法,因為現在為止畢竟是兩塊程序類,這兩個彼此之間的聯系需要 有一個連接點,而程序中配置的“@ComponentScan”就是負責這個連接處理,但是 SpringBoot 考慮到了此類的配置問題,所以提 出了一個更簡化策略,該策略的核心思想:既然程序主類會在所有開發包的父包里面,那么能不能簡化點取得配置呢?為此在實際 的開發之中,會使用一個特殊的復合注解:

package cn.study.microboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 啟動SpringBoot程序,而后自帶子包掃描
public class SampleController {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

 @SpringBootApplication = @EnableAutoConfiguration + @ComponentScan + 其它配置。正是因為它有這樣的特點,所以當 以后使用 Bean 實現配置處理的時候將會非常的容易。

 2.4、配置訪問路徑

在一個實際的項目開發之中,控制器的路徑可能會有許多的個,而且在進行控制器編寫的時候也會有兩種運行模式:跳轉配 置、Restful 顯示。那么下面來觀察關於路徑的詳細描述。

1、 在之前所編寫的控制器里面你會發現有如下的兩個注解配置使用:

· @Controller 在類上定義表示定義的是一個控制器;

· @ResponseBody:將控制器中方法的返回值變為 rest 內容。

但是如果說你現在一個項目里面可能控制器之中返回的全部都是Restful信息,這樣分別定義就太麻煩了,為此在SpringBoot 里面又提供有一個復合注解:“@RestController”

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/")
    public String home() {
        return "www.study.cn";
    }
}

 因為從 MVC 實際標准來講,控制器需要傳遞一些屬性到頁面上進行顯示,按照這樣的原則並不是所有的開發都會以 Restful 結構返回,但是 Rest 結構是 SpringCloud 的實現核心技術

 2、 現在所給出的控制器的類里面只是負責了簡單的信息返回,那么實際上也可以進行參數的接收處理,傳遞參數到控制器之中 最簡單的做法是使用地址重寫傳遞“xx?參數名稱=內容”;

@RequestMapping("/echo")
public String echo(String msg) {
       return "【ECHO】" + msg ;
}

 訪問路徑:http://localhost:8080/echo?msg=hello;

 3、 由於 SpringBoot 支持 Rest 風格處理,所以此時對於參數的接收可以采用路徑參數的形式完成:

@RequestMapping(value="/echo/{message}",method=RequestMethod.GET)
public String echo(@PathVariable("message") String msg) {
     return "【ECHO】" + msg ;
}

 訪問路徑:http://localhost:8080/echo/hello; 個人意見:雖然路徑參數的形式屬於 rest 操作標准

 個人意見:雖然路徑參數的形式屬於 rest 操作標准,但是個人覺得使用地址重寫傳遞參數更加簡單,不過這一點使用什么樣的模式來處理,取決於你所處的項目團隊。

 4、 在 SpringBoot 的處理操作之中實際上已經充分考慮到了此類情況,所以追加有自動加載配置的依賴庫;

· 如果你現在的項目只是一個簡單的 SpringBoot 的配置項目,則顯示的項目信息如下:

· 【micro-base 模塊】如果說你現在添加有如下的兩個依賴庫,修改 pom.xml 文件:

<!--熱啟動  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency> 

 引入完成之后可以觀察項目上的提示信息:

2.5、使用內置對象

通過整個SpringBoot 程序可以發現,在 SpringBoot 中的控制器的形式和 SpringMVC 是一樣的,所以如果現在要想在你的程序之中去使用 JSP 的內置對象,那么也可以按照與 SpringMVC 同樣的方式進行。

    @RequestMapping("/object")
    public String object(HttpServletRequest request,HttpServletResponse response) {
    System.out.println("*** 客戶端IP地址:" + request.getRemoteAddr());
    System.out.println("*** 取得客戶端響應編碼:" + response.getCharacterEncoding());
    System.out.println("*** 取得SessionID:" + request.getSession().getId());
    System.out.println("*** 取得真實路徑:" + request.getServletContext().getRealPath("/upload/"));
    return "www.study.cn" ;
    }

 輸出:

*** 客戶端IP地址:0:0:0:0:0:0:0:1
*** 取得客戶端響應編碼:ISO-8859-1
*** 取得SessionID:35B3BFE058AEF7F3121B154EA47FA775
*** 取得真實路徑:C:\Users\THINKPAD\AppData\Local\Temp\tomcat-docbase.2837993313407535911.8080\upload\

通過以上的信息可以發現,此時的 SpringBoot 運行依然需要有一個工作目錄,只不過這個工作目錄是由 SpringBoot 自己定義 的,主要就是當前用戶的目錄下存在。

 2.6、項目打包發布

SpringBoot 作為微架構實現主要技術,其發布項目的方式極為簡單,只需要你在你的項目中配置好插件,以及打包就可以執行了,並且這個執行不需要特別復雜的配置。

1、 【microboot 項目】修改 pom.xml 配置文件,追加新的插件:

           <plugin>    <!-- 該插件的主要功能是進行項目的打包發布處理 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>    <!-- 設置程序執行的主類 -->
                    <mainClass>cn.study.microboot.StartSpringBootMain</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

 由於增加了新的插件,所以對於整個的程序一定要進行整體的項目更新。

2、 【microboot-base 模塊】將當前項目模塊進行打包處理:clean package;

此時將形成“microboot.jar”程序文件,並且這個文件里面包含有全部的依賴支持庫文件;

3、 將“microboot.jar”文件隨意拷貝到一個路徑之中,例如:D 盤,而后進入到命令行方式下:java -jar microboot.jar

     如果此時要想在 Linux 下執行,只需要將這個*.jar 文件直接上傳到 Linux 下即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM