1. 程式人生 > >guisu,程式人生。 逆水行舟,不進則退。

guisu,程式人生。 逆水行舟,不進則退。

     Spring 框架作為目前非常流行的一個 Java 應用開發框架,它所包含的內容是非常繁多的。Spring 框架包含幾十個不同的子專案,涵蓋應用開發的不同方面。要在這些子專案之間進行選擇,並快速搭建一個可以執行的應用是比較困難的事情。Spring Boot 的目的在於快速建立可以獨立執行的 Spring 應用。通過 Spring Boot 可以根據相應的模板快速建立應用並執行。Spring Boot 可以自動配置 Spring 的各種元件,並不依賴程式碼生成和 XML 配置檔案。Spring Boot 可以大大提升使用 Spring 框架時的開發效率。

Spring Boot提供了一個強大的一鍵式Spring的整合開發環境,能夠單獨進行一個Spring應用的開發,其中:

(1)集中式配置(application.properties)+註解,大大簡化了開發流程
(2)內嵌的Tomcat和Jetty容器,可直接打成jar包啟動,無需提供Java war包以及繁瑣的Web配置
(3)提供了Spring各個外掛的基於Maven的pom模板配置,開箱即用,便利無比。
(4)可以在任何你想自動化配置的地方,實現可能
(5)提供更多的企業級開發特性,如何系統監控,健康診斷,許可權控制
(6) 無冗餘程式碼生成和XML強制配置
(7)提供支援強大的Restfult風格的編碼,非常簡潔

1、安裝

  • 一個稱手的文字編輯器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
  • Java環境(JDK 1.7或以上版本)
  • Maven 3.0+(Eclipse和Idea IntelliJ內建,如果使用IDE並且不使用命令列工具可以不安裝)
1. spring-boot是一個mavan專案,所以其使用的jar包全部是通過maven管理,當然,使用maven也是非常方便的。 2. spring-boot打出來的包是一個可執行jar包的狀態,使用的是內建的tomcat伺服器,所以不需要將專案轉成EJB專案。

Eclipse外掛安裝

1) 外掛安裝

點選選單 Help -> Install new software 進行外掛安裝

外掛地址 http://m2eclipse.sonatype.org/sites/m2e

如果你已經成功安裝了這個外掛,當你開啟Window→ Preferences...的時候,你應該能夠在一個選項列表中看到一個Maven選項

安裝好m2eclipse外掛後,要作兩個設定 a) 禁用Downloadrepository index updates on startup(即取消這個選項的勾選,第三個第四個可以點上),如下圖

b) 設定maven的setting.xml檔案路徑,如下圖

2、建立應用

使用Spring Boot框架可以大大加速Web應用的開發過程,首先在Maven專案依賴中引入spring-boot-starter-web

我們在Eclipse 建立maven專案:

填寫GroupId和artifactId

後生成:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String greeting() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
 在IDE中直接直接執行main方法,然後訪問http://localhost:8080即可。
 另外可以使用maven打包為可執行jar包,然後執行java -jar xxx.jar。
 或者執行mvn spring-boot:run執行專案。
 在瀏覽器中訪問http://localhost:8080/,Hello World!就出現在了頁面中。只用了區區十幾行Java程式碼,一個Hello World應用就可以正確執行.

3、spring boot專案結構

3.1、pom.xml檔案

 pom.xml檔案就是專案依賴檔案,maven根據pom.xml自動載入相應的依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>guisu</groupId>
  <artifactId>guisu-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>guisu</name>
  <description>Demo project for Spring WebMvc</description>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
  </properties>

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

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>


</project>

在Maven依賴中引入了spring-boot-starter-web,它包含了Spring Boot預定義的一些Web開發的常用依賴:

  • spring-webspring-webmvc Spring WebMvc框架
  • tomcat-embed-* 內嵌Tomcat容器
  • jackson 處理json資料
  • spring-* Spring框架
  • spring-boot-autoconfigure Spring Boot提供的自動配置功能

    “org.springframework.boot:spring-boot-starter-web”是 Spring Boot 所提供的推薦的基礎 POM 檔案之一,用來提供建立基於 Spring MVC 的 Web 應用所需的第三方庫依賴。除了這個 POM 檔案之外,Spring Boot 還提供了其他類似的 POM 檔案。所有這些基礎 POM 依賴都在“org.springframework.boot”組中。一些重要 POM 檔案的具體說明見:

Spring Boot 推薦的基礎 POM 檔案
名稱 說明
spring-boot-starter 核心 POM,包含自動配置支援、日誌庫和對 YAML 配置檔案的支援。
spring-boot-starter-amqp 通過 spring-rabbit 支援 AMQP。
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 來支援面向切面程式設計(AOP)。
spring-boot-starter-batch 支援 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 來支援 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 來支援 MongoDB。
spring-boot-starter-data-rest 通過 spring-data-rest-webmvc 支援以 REST 方式暴露 Spring Data 倉庫。
spring-boot-starter-jdbc 支援使用 JDBC 訪問資料庫。
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含常用的測試所需的依賴,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支援使用 Velocity 作為模板引擎。
spring-boot-starter-web 支援 Web 應用開發,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支援使用 Tomcat 開發 WebSocket 應用。
spring-boot-starter-ws 支援 Spring Web Services。
spring-boot-starter-actuator 新增適用於生產環境的功能,如效能指標和監測等功能。
spring-boot-starter-remote-shell 新增遠端 SSH 支援。
spring-boot-starter-jetty 使用 Jetty 而不是預設的 Tomcat 作為應用伺服器。
spring-boot-starter-log4j 新增 Log4j 的支援。
spring-boot-starter-logging 使用 Spring Boot 預設的日誌框架 Logback。
spring-boot-starter-tomcat 使用 Spring Boot 預設的 Tomcat 作為應用伺服器。

所有這些 POM 依賴的好處在於為開發 Spring 應用提供了一個良好的基礎。Spring Boot 所選擇的第三方庫是經過考慮的,是比較適合產品開發的選擇。但是 Spring Boot 也提供了不同的選項,比如日誌框架可以用 Logback 或 Log4j,應用伺服器可以用 Tomcat 或 Jetty。

3.2  java程式碼

建立src/main/java/Application.java:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String greeting() {
        return "Hello World!";
    }

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

類似如下結構:

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">用來管理javaBean實體物件</span>
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service //業務邏輯層,處理資料邏輯,驗證資料

         |   +- CustomerService.java
         |
         +- web //Controller控制器
             +- CustomerController.java

    Spring Boot建議將我們main方法所在的這個主要的配置類配置在根包名下。

     執行應用後,那麼這段程式碼究竟做了什麼呢?我們從程式的入口SpringApplication.run(Application.class, args);開始分析:

    Java程式碼中沒有任何配置,和傳統的Spring應用相比,多了兩個我們不認識的符號:

  • @EnableAutoConfiguration
  • @SpringApplication

    它們都是由Spring Boot框架提供。在SpringApplication.run()方法執行後,Spring Boot的autoconfigure發現這是一個Web應用(根據類路徑上的依賴確定),於是在內嵌的Tomcat容器中啟動了一個Spring的應用上下文,並且監聽預設的tcp埠8080(預設約定)。同時在Spring Context中根據預設的約定配置了Spring WebMvc:

  • Servlet容器預設的Context路徑是/
  • DispatherServlet匹配的路徑(servlet-mapping中的url-patterns)是/*
  • @ComponentScan路徑被預設設定為SampleController的同名package,也就是該package下的所有@Controller@Service@Component@Repository都會被例項化後並加入Spring Context中。

    沒有一行配置程式碼、也沒有web.xml。基於Spring Boot的應用在大多數情況下都不需要我們去顯式地宣告各類配置,而是將最常用的預設配置作為約定,在不宣告的情況下也能適應大多數的開發場景。


  1. SpringApplication是Spring Boot框架中描述Spring應用的類,它的run()方法會建立一個Spring應用上下文(Application Context)。另一方面它會掃描當前應用類路徑上的依賴,例如本例中發現spr