Java之Spring Boot詳解(非原創)

文章大綱

1、Spring Boot 概述
2、Spring Boot 入門案例
3、Spring Boot核心功能代碼實戰
4、項目源碼與資料下載
5、參考文章javascript

 

1、Spring Boot 概述

1. 什麼是 Spring Boot

  Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。簡單的來講 Spring Boot 這個項目整合目前不少的流行的第三方框架,而且作了一系列的默認配置,咱們無需在進行手動配置,直接拿過來直接使用! 接下來咱們比較一下Spring mvc和 Spring Boot的開發過程php

Spring mvc
(1)導入 spring mvc 的相關依賴包
(2)在 web.xml 文件中配置 Spring mvc 的前端控制器
(3)建立一個 spring mvc 的配置文件
(4)在 spring mvc 的配置文件中進行相關配置
  1) 配置註解掃描路徑
  2)配置處理器映射器
  3)配置處理器適配器
  4)配置視圖解析器
(5)開發 Controllercss

Spring Boot
(1)導入相關的依賴包
(2)開發 Controller
  單單從開發步驟上講都比咱們的原始開發少了不少,其中的配置部分 Spring Boot 幫咱們完成了,不須要咱們在進行配置,固然若是咱們想
  更改 Spring Boot 的默認配置也是能夠的.極大的簡化了咱們的開發.html

2. Spring Boot 的核心功能

(1)獨立運行的 spring 項目: Spring Boot 能夠以 jar 包形式直接運行,如 java -jar xxx.jar 優勢是:節省服務器資源
(2)內嵌 servlet 容器: Spring Boot 能夠選擇內嵌 Tomcat,Jetty,這樣咱們無須以 war 包形式部署項目。
(3)提供 starter 簡化 Maven 配置: 在 Spring Boot 項目中爲咱們提供了不少的 spring-boot-starter-xxx 的項目(咱們把這個依賴能夠稱之爲起步依賴,咱們導入指定的這些項目的座標,就會自動導入和該模塊相關的依賴包:例如咱們後期再使用 Spring Boot 進行 web 開發咱們就須要導入 spring-boot-starter-web 這個項目的依賴,導入這個依賴之後!那麼Spring Boot 就會自動導入 web 開發所須要的其餘的依賴包,以下圖所示:前端

 

(4)自動配置 spring: Spring Boot 會根據在類路徑中的 jar 包,類,爲 jar 包裏的類自動配置 Bean,這樣會極大減小咱們要使用的配置。固然 Spring Boot 只考慮了大部分開發場景,並非全部的場景,若是在實際的開發中咱們須要自動配置 Bean,而 Spring Boot 不能知足,則能夠自定義自動配置。
(5)準生產的應用監控: Spring Boot 提供基於 http,ssh,telnet 對運行時的項目進行監控
(6)無代碼生成和 xml 配置: Spring Boot 大量使用 spring4.x 提供的註解新特性來實現無代碼生成和 xml 配置。spring4.x 提倡使用 Java配置和註解配置組合,而 Spring Boot 不須要任何 xml 配置便可實現 spring 的全部配置。java

3. Spring Boot 的優勢和缺點

3.1 優勢
(1)快速構建項目
(2)對主流框架無縫集成
(3)項目能夠獨立運行,無需依賴外部 servlet 容器
(4)提供運行時的應用監控
(5)極大提升了開發,部署效率mysql

3.2 缺點
(1)資料相對比較少
(2)版本迭代較快jquery

2、Spring Boot 入門案例

1. 新建maven項目

 
 
 

建立後項目結構以下:web

 

2. 新建相關文件夾與包

main/java下新建包cn.itcast.startredis

 

resources文件夾下新建相關內容

 

3. pom.xml文件添加maven依賴

<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>cn.itcast</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!--Spring Boot 項目默認的編譯版本是 1.6,若是咱們想使用其餘的編譯版本咱們就須要在 pom.xml 文件中定義一個變量--> <java.version>1.8</java.version> </properties> <dependencies> <!-- 加入web開發的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> </dependencies> <build> <plugins> <!-- maven的編譯插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 沒有該配置,devtools 不生效 --> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> </project> 

4. 開發 Controller

在cn.itcast.start.controller包下建立測試UserController.java

//@RestController註解至關於@ResponseBody + @Controller合在一塊兒的做用 @RestController public class UserController { @RequestMapping("info") public User hello(){ User user = new User(); user.setUsername("張三丰"); user.setAddress("揭陽市"); return user; } } 

5. 開發啓動類HelloSpringBootApplication.java

package cn.itcast.start; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; //主Application類(加了SpringBootApplication的類),必定要放在代碼的最外層,即Application.class與包同一級別 //這樣能夠保證在裝配Bean的時候從Application所在的文件下從上向下掃描時,全部的類都會被裝配進項目。 // 而若是寫在某個包裏,Application.class掃描時掃描不到其餘class,所以springboot啓動的時候沒有報錯,可是沒辦法進行訪問 @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { //入口運行類 SpringApplication.run(MySpringBootApplication.class, args); } } 

建立後項目結構以下:

 

舒適提示:
(1)MySpringBootApplication啓動類必定要放在代碼的最外層,即Application.class與包同一級別,這樣能夠保證在裝配Bean的時候從Application所在的文件下從上向下掃描時,全部的類都會被裝配進項目。若是寫在某個包裏,Application.class掃描時掃描不到其餘class,所以springboot啓動的時候沒有報錯,可是沒辦法進行訪問。
(2)@RestController註解至關於@ResponseBody + @Controller合在一塊兒的做用
(3)@Controller註解若是沒指定訪問的url,那麼該類下面的@RequestMapping方法不能出現重名(整個項目都不能夠出現)

6. 運行項目並訪問

 

啓動完成

 

瀏覽器進行訪問

 

3、Spring Boot核心功能代碼實戰

1. 無 xml 配置的實現

  自從 spring3.0 之後 spring 提供了不少的註解來替代 xml 文件的配置.最爲核心的是下面的兩個註解:
  (1)@Configuration 標註該類是一個配置類.相似於咱們定義的 applicationContext.xml
  (2)@Bean 相似於咱們在以前的 spring 配置文件中配置的<bean id=」」 class=」」/>
  有了上面的兩個註解咱們就可使用編碼的方式來完成 spring 的相關配置,接下來咱們就來使用 java 編碼的方式來完成 spring 的配置

1.1 新建HelloService.java
在cn.itcast.start.service下新建HelloService.java類

package cn.itcast.start.service; public interface HelloService { public String sayHello(); } 

1.2 新建HelloServiceImpl.java
cn.itcast.start.service.impl包下新建HelloServiceImpl.java

package cn.itcast.start.service.impl; import cn.itcast.start.service.HelloService; public class HelloServiceImpl implements HelloService { @Override public String sayHello() { return "Hello JavaConfig"; } } 

建立後項目文件結構以下:

 

1.3 編寫配置類
cn.itcast.start.config包下新建JavaConfigTest.java類

package cn.itcast.start.config; import cn.itcast.start.service.HelloService; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class JavaConfigTest { public static void main(String[] args) { // 經過AnnotationConfigApplicationContext這個類獲取Spring容器 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfiguration.class) ; HelloService helloService = applicationContext.getBean(HelloService.class) ; String result = helloService.sayHello() ; System.out.println(result); } } 

1.4 運行JavaConfigTest.java

 

這個時候咱們應該就明白了 Spring Boot 項目之因此能作到不須要 xml 文件,是由於它使用了這兩個註解替換了以前了 xml 文件的配置。

2. 靜態資源的訪問

  在咱們 web 開發中,存在不少的一些 css , js , 圖片等等一些靜態的資源文件!那麼咱們應該把這些靜態資源存儲在什麼目錄下呢?Spring Boot 項目要求咱們將這個靜態資源文件存儲到 resources 目錄下的 static 目錄中; 固然這個配置是能夠進行更改的,可是不建議更改!在進行訪問的時候咱們不須要添加上 static 文件目錄,Spring Boot 會自動在 static 目錄中查找對應的資源文件.
  咱們新建在resouces下的static文件夾就是用於存放靜態資源的,靜態資源的實戰咱們會在下面的模板引擎(freemarker)進行介紹

3. 模板引擎(freemarker)

  Spring Boot 項目建議咱們使用模板引擎來進行頁面視圖的渲染,而不建議咱們使用 jsp! 所以內嵌的 tomcat 也沒有提供 jsp 頁面的支持.Spring Boot 提供了大量的模板引擎,包含: Freemarker , Groovy , Thymeleaf , Velocity 和 Mustache. 本次咱們就來說解一下 Spring Boot繼承 freemarker 做爲頁面視圖!
3.1 pom.xml添加依賴

<!--添加模板引擎(freemarker)依賴包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> 

3.2 添加靜態資源文件
  將項目源碼與資料下載中的資源文件複製進去static文件夾下

 

3.3 添加模板引擎
Spring Boot 項目爲咱們提供了一個 templates 目錄專門用來存儲模板文件的. 所以咱們須要將指定的模板文件放在該目錄下! 模板文件的後綴名默認是 ftl.

 

3.4 新建訪問Controller類
  cn.itcast.start.controller包下新建JdController.java

package cn.itcast.start.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //當使用Controller或RestController時,沒指定訪問的RequestMapping,那麼全部的RequestMapping不能出現同名,不然啓動會報錯 @Controller public class JdController { /** * 需求:返回jd首頁 */ @RequestMapping("list") public String jdList(){ return "index"; } } 

3.5 運行項目並訪問

 
 

4. 文件上傳

4.1 新增模板文件
templates文件夾下新建模板文件file-upload.ftl

 
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用戶添加</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="css/bootstrap-theme.min.css" /> <link rel="stylesheet" href="css/bootstrap.min.css" /> <script type="text/javascript" src="js/jquery-1.11.3.min.js" ></script> <script type="text/javascript" src="js/bootstrap.min.js" ></script> </head> <body class="container"> <center> <h1>文件上傳表單</h1> </center> <form role="form" action="/fileUpload" enctype="multipart/form-data" method="post"> <div class="form-group"> <label for="inputfile">文件輸入</label> <input type="file" id="inputfile" name="uploadFile"> </div> <button type="submit" class="btn btn-default">提交</button> </form> </body> </html> 

4.2 新建上傳文件 Controller
cn.itcast.start.controller包下新建UploadController.java

package cn.itcast.start.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import java.io.File; @Controller public class UploadController { /** * 需求:返回文件上傳頁面 */ @RequestMapping("file") public String jdList(){ return "file-Upload"; } @RequestMapping(value = "/fileUpload") @ResponseBody public String fileUpload(MultipartFile uploadFile) { try { File file = new File("D:\\images\\" + uploadFile.getOriginalFilename()) ; uploadFile.transferTo(file); } catch (Exception e) { e.printStackTrace(); } return "success" ; } } 

4.3 運行項目並訪問

 
 

5. Jsp 頁面的支持(瞭解)

Spring Boot 不建議咱們使用 jsp 頁面做爲視圖的顯示層,所以在 Spring Boot 中默認是不支持 jsp 頁面的.若是咱們還想使用 jsp 頁面就須要添加 jsp 頁面的支持!

<!-- jsp的支持 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> 

6. 攔截器

  攔截器對使用 Spring mvc、Struts 的開發人員來講特別熟悉,由於你只要想去作好一個項目必然會用到它。攔截器在咱們平時的項目中用處有不少,如:日誌記錄、用戶登陸狀態攔截、安全攔截等等。而 Spring Boot 內部集成的是 Spring mvc 控制框架,因此使用起來跟SpringMVC 沒有區別,只是在配置上有點不一樣。
  下面演示攔截文件上傳接口,並直接跳轉到商城首頁

6.1 編寫攔截器
cn.itcast.start.interceptor包下新建CheckUserLoginInterceptor.java

package cn.itcast.start.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CheckUserLoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.sendRedirect("/list"); return false ; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } 
 

6.2 配置攔截器
cn.itcast.start.config包下新建InterceptorConfig.java

package cn.itcast.start.config; import cn.itcast.start.interceptor.CheckUserLoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class InterceptorConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CheckUserLoginInterceptor()).addPathPatterns("/file") ; } } 

舒適提示:file爲接口訪問的url

6.3 運行項目並訪問

 
 
 

7. 整合mybatis

7.1 新建數據庫
我已經準備好相應的.sql文件在項目源碼與資料下載中,請直接使用Navicat for MySQL工具進行導入,數據庫名爲springboot_test,具體字段以下:

 

我已經插入了一條數據

 

7.2 pom.xml文件添加maven依賴

<!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!--阿里巴巴數據鏈接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.28</version> </dependency> 

7.3 添加配置文件
application.properties文件下添加如下內容:

 
#spring集成Mybatis環境 mybatis.type-aliases-package=cn.itcast.start.domain #加載Mybatis配置文件 mybatis.mapper-locations = classpath:mapper/*Mapper.xml mybatis.config-location = classpath:mapper/config/sqlMapConfig.xml spring.datasource.driver-class-name= com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/springboot_test?useUnicode=true&useSSL=true spring.datasource.username = root spring.datasource.password = 147258qq 

mapper文件夾下新建UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.itcast.start.mapper.UserMapper"> <select id="findAll" resultType="user"> select * from user </select> </mapper> 

mapper/config文件夾下新建sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> </configuration> 

建立後項目結構以下:

 

7.4 新建相關代碼
cn.itcast.start.domain包下新建實體類User.java

package cn.itcast.start.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private Integer id; private String username; private Date birthday; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } 

cn.itcast.start.mapper包下新建UserMapper.java

package cn.itcast.start.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import cn.itcast.start.domain.User; @Mapper public interface UserMapper { public List<User> findAll(); } 

cn.itcast.start.service包下新建UserService.java

package cn.itcast.start.service; import java.util.List; import java.util.Map; import cn.itcast.start.domain.User; public interface UserService { /** * 根據接口查詢所用的用戶 */ } 

cn.itcast.start.service.impl包下新建UserServiceImpl.java

package cn.itcast.start.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import redis.clients.jedis.JedisCluster; import cn.itcast.start.domain.User; import cn.itcast.start.mapper.UserMapper; import cn.itcast.start.service.UserService; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; public List<User> findAllUser() { List<User> list = userMapper.findAll(); return list; } } 

cn.itcast.start.controller包下新建UserController.java

package cn.itcast.start.controller; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import cn.itcast.start.domain.User; import cn.itcast.start.service.UserService; //@RestController註解至關於@ResponseBody + @Controller合在一塊兒的做用 @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("info") public User hello(){ User user = new User(); user.setUsername("張三丰"); user.setAddress("揭陽市"); return user; } @RequestMapping("list2") public List<User> list2(){ List<User> list = userService.findAllUser(); return list; } } 

7.5 運行項目並訪問

 
 

8. 項目熱部署(開發時使用)

  在進行項目開發階段,咱們須要頻繁的修改代碼,來進行項目的測試!每一次進行項目代碼修改的時候,咱們都須要進行項目從新啓動,這樣新添加的代碼才能夠生效!這種作法比較麻煩.咱們就可使用 Spring Boot 爲咱們提供的: spring-boot-devtools,來進行項目的熱部署! 咱們只須要引入對應的依賴包便可!

8.1 pom.xml文件添加相關配置

<!-- 熱部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 沒有該配置,devtools 不生效 --> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> 

8.2 application.properties文件添加配置

#熱部署生效 spring.devtools.restart.enabled:true #設置重啓的目錄 spring.devtools.restart.additional-paths:src/main/java #classpath目錄下的WEB-INF文件夾內容修改不重啓 spring.devtools.restart.exclude:WEB-INF/** 

8.3 idea修改配置
這樣配置在myeclipse中已經能夠實現熱啓動,可是在idea中配置好無效,下面須要修改idea中的兩個配置
(1)setting –> compiler ,將 Build project automatically 勾選上
(2)alt + shift + a 搜索 registry 選第一個,彈出框後下拉找到compiler.automake.allow.when.app.running 勾選上便可。
(3)重啓idea

8.4 運行項目並測試

 

瀏覽器訪問以下

 

清除控制檯信息

 

在代碼中修改返回的參數

 

點擊保存後,查看控制檯,項目已經自動從新部署

 

從新訪問瀏覽器

 

4、項目源碼與資料下載

連接:https://pan.baidu.com/s/1lup1Wey-i9EW8G03-4ukig
提取碼:737x

5、參考文章

http://yun.itheima.com/course/471.html

相關文章
相關標籤/搜索