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並且不使用命令列工具可以不安裝)
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-web
,spring-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的應用在大多數情況下都不需要我們去顯式地宣告各類配置,而是將最常用的預設配置作為約定,在不宣告的情況下也能適應大多數的開發場景。
-
SpringApplication
是Spring Boot框架中描述Spring應用的類,它的run()
方法會建立一個Spring應用上下文(Application Context)。另一方面它會掃描當前應用類路徑上的依賴,例如本例中發現spr