第1章 Spring Boot 简介
Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无 需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级 Java 开发提供了一种相对简单的方法, 通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。
虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的。
- 第一阶段:xml 配置
在Spring 1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml 配置文件放到不同的配置文件里,那时需要频繁的在开发的类和配置文件之间进行切换
- 第二阶段:注解配置
在 Spring 2.x 时代,随着 JDK1.5 带来的注解支持,Spring 提供了声明 Bean 的注解(例如 @Component、@Service),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用 xml,业 务配置用注解
- 第三阶段:java 配置
Spring 3.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,可以代替 XML。 我们目前刚好处于这个时代,Spring4.x 和 Spring Boot 都推荐使用 Java 配置。
所有这些配置都代表了开发时的损耗。 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切 换,所以写配置挤占了写应用程序逻辑的时间。除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里
要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并
且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无 疑问会是生产力杀手。
Spring Boot 让这一切成为了过去。 Spring Boot 简化了基于 Spring 的应用开发,只需要“run”就能创建一个独立的、生产级别的 Spring 应用。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的 开始。多数 Spring Boot 应用只需要很少的 Spring 配置。 我们可以使用 SpringBoot 创建 java 应用,并使用 java –jar 启动它,或者采用传统的 war 部署方式。
Spring Boot 主要目标是: 为所有 Spring 的开发提供一个从根本上更快的入门体验 开箱即用,但通过自己设置参数,即可快速摆脱这种方式。
提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等 绝对没有代码生成,也无需 XML 配置。
第2章 Spring Boot 入门
2.1 环境搭建
2.1.1 环境需求
数据库:MySQL
IDE:Eclipse Mars2
Spring-Boot:1.4.4
Maven: 3.3.3 (官方声明 1.4.4 版本需要 Maven 3.2+)
本地仓库:需要使用资料中的仓库
2.1.2 创建一个 Maven 工程并添加起步依赖
添加依赖 在 pom.xml 中添加依赖,效果如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
</parent>
<groupId>cn.xxx.springboot</groupId>
<artifactId>xxx-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
我们会惊奇地发现,我们的工程自动添加了好多好多 jar 包,而这些 jar 包正式我们做开发时需要导入的 jar 包。
因 为 这 些 jar 包 被 我 们 刚 才 加 入 的 spring-boot-starter-web 所 引 用 了 , 所 以 添 加 spring-boot-starter-web 后会自动把依赖传递过来。
2.1.3 变更 JDK 版本(如果做了 maven 全局配置可略过此步)
我们发现默认情况下工程的 JDK 版本是 1.6,但是通常使用的是 1.7 的版本
修改 JDK 为 1.7,需要在 pom.xml 中添加以下配置:
<properties>
<java.version>1.7</java.version>
</properties>
使用 Maven 更新工程后,就发现版本已经变成 1.8 了
注意: 虽然 JDK1.6 或者 1.7 都可以使用 Spring-Boot,但 Spring-Boot 官方建议使用 JDK1.8。要使用 JDK1.8,首先必须要配置 JDK1.8 后,才可以使用上述方法设置。
2.1.4 编写引导类并使用注解配置
需要创建一个引导类:
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo {
public static void main(String[] args) {
SpringApplication.run(Demo.class, args);
}
}
这里多了一个@SpringBootApplication 注解
@Configuration: 用于定义一个配置类
@EnableAutoConfiguration :Spring Boot 会自动根据你 jar 包的依赖来自动配置 项目。
@ComponentScan: 告诉 Spring 哪个 packages 的用注解标识的类会被 spring 自动扫描并且装入 bean 容器。
Banner
直接启动,控制台出现以下标识。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.4.RELEASE)
这个标识是 Spring 启动标识,如果不想要,可以设置取消
package com.xxx;
import javafx.application.Application;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo {
public static void main(String[] args) {
// SpringApplication.run(Demo.class, args);
SpringApplication application = new SpringApplication(Application.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
参考附录二的 banner 设置,可以通过修改配置文件制定自己的标识
2.1.5 测试环境搭建结果
在地址栏输入:http://localhost:8080,看到下图即表示搭建成功
2.2 入门程序
2.2.1 需求
使用 Spring MVC 和 Spring Boot 整合实现浏览器输出 Hello Spring Boot!
2.2.2 原来的实现
我们现在开始使用 spring MVC 框架,实现 json 数据的输出。如果按照我们原来的做法,需要在 web.xml 中添加一个 DispatcherServlet 的配置,还需要添加一个 spring 的配置文件,配置文件如下配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- spring 加入配置 -->
<!-- controller 注解扫描 -->
<context:component-scan base-package="cn.xxx.springboot.controller"
/>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!--web.xml 加入配置 -->
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>xxx-springboot</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>xxx-springboot</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</beans>
还要编写 Controller。。。
2.2.3 Spring-Boot 的实现
我们不需要配置文件,直接编写 Controller 类即可
package com.xxx.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
@RestController 注解:
其实就是@Controller 和@ResponseBody 注解加在一起
启动方式一:启动之前编写的引导类即可
启动方式二:使用 Maven 命令 spring-boot:run 执行即可
选择 Maven Build
在浏览器地址栏输入 http://localhost:8080/hello 即可看到运行结果
2.3 热部署
我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费 了大量的时间。
能不能在我修改代码后不重启就能生效呢?可以,由于 Spring Boot 应用只是普通的 Java 应用,所以 JVM 热交换(hot-swapping)也能开箱即用。不过 JVM 热交换能替换的字节码有限制,想要更彻底的解决方案可以使 用 Spring Loaded 项目或 JRebel。 spring-boot-devtools 模块也支持应用快速重启(restart)。
2.3.1 导入 maven 依赖
我们只需要在 pom.xml 加入如下配置即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
2.3.2 在 eclipse 中配置启动参数
-javaagent:E:/MavenRepository/org/springframework/springloaded/1.2.9/springloade d-1.2.9.jar -noverify
2.3.3 特殊说明
在 spring5.x 时,必须使用 springloaded 最新版 1.2.9。因为 spring5.x 采用的是 1.8 为内核编写的。而
springloaded1.2.9 以前的版本都不支持 spring5.x。
这个 jar 包需无法通过在 pom.xml 中导入依赖自动下载。需要我们自己下载并且手动安装到 maven 仓库。
maven 命令:
首先通过 cmd 窗口进入到 jar 所在目录,然后拷贝下面的命令到控制台。回车运行。
mvn install:install-file -DgroupId=org.springframework -DartifactId=springloaded -Dversion=1.2.9
-Dpackaging=jar -Dfile=springloaded-1.2.9.BUILD.jar
注意:
安装 jar 包时,jar 存放目录最好别有中文和空格。