目录
1. Spring Boot 的目标与优点
1.1 Spring Boot目标
Spring是为了简化Java程序的开发而诞生的, Spring是包含了众多工具方法的IoC容器, 而Spring Boot则是为了简化Spring程序开发而诞生, 所以Spring Boot是为了快速开发和使用Spring的脚手架.
1.2 Spring Boot的优点
- 快速集成框架, Spring Boot提供了启动添加依赖的功能 (快速添加外部jar包), 用于秒级集成各种框架.
- 内置运行容器, 无需配置Tomcat等Web容器, 可以直接运行和部署程序.
- 快速部署项目, 无需依赖任何Web容器即可启动并运行项目.
- 可以完全抛弃繁琐的XML, 使用注解和配置的方式进行开发.
- 支持更多的监控的指标, 可以更加容易且直观观察到项目的运行情况.-
2. Spring Boot项目创建及运行
创建Spring Boot有两种方式:
- 通过IDEA创建 (主要创建方式)
- 专业版: 无需安装任何插件, 可以直接创建Spring Boot项目
- 社区版: 安装插件
- 通过网页版创建
2.1 使用IDEA创建
项目创建
要在IDEA中创建Spring Boot, 我们就需要先安装插件Spring Boot Helper.
因为Spring Boot的创建是属于高级功能, 而我们的社区版IDEA是不具备创建高级功能的能力, 所以需要先安装插件.
安装好之后, 它的名字就变成了Spring lnitializr and Assistant
接下来我们来创建Spring Boot项目
选择 spring boot 项目,选择合适 jdk 版本,设置创建项目源 (默认 spring 官网: start.spring.io)
项目的参数设置
选择Spring Boot版本, 以及添加项目依赖
设置项目名称和保存路径, 点击Finish就完成Spring Boot的项目创建了.
注意: 第一次创建Spring Boot项目需要加载很久, 因为当前Spring Boot框架并没有在自己的本地仓库.
如果启动类(src.main.java.com.example.demo)中的DemoApplication.java变成了蓝色的运行小图标, 那么就说明初始化好了.
可以看到, 右侧不存在Maven的选项卡, 因为IDEA并没有识别这个项目的类型, 所以没有Maven, 那么就需要再进行一个选择的操作:
点击OK之后, IDEA就会开始加载整个项目.
注: 如果项目加载出错, Maven国内源没有配置好, 具体请查看该篇博客http://t.csdn.cn/vdAIF.
这样我们的项目就创建好了.
项目运行
接下来我们来看一下这个项目有没有初始化好.
来到它的启动类.
启动类的标志为有@SpringBootApplication注解, 这个注解修饰的类就为Spring Boot的启动类.
然后我们点击main方法进行运行操作,
点击Run之后, 可以看到弹出了控制台, 如果控制台打印了启动所用的时间, 显示了有Spring的logo, 以及版本号等信息, 然后是启动信息, 最后是"Started DemoApplication in 6.289 seconds (JVM running for 7.467)", 这就说明项目已经创建好了.
2.2 网页版创建
我们也可以使用Spring官方提供的网页版来创建Spring Boot项目.
首先访问https://start.spring.io , 如下所示,
依照下图选择可以创建Spring Boot项目.
当点击生成之后, 网页就会开始生成项目了, 生成之后会有一个jar包,
并且浏览器会自动下载这个jar包,
把项目包导入IDEA中调试好就能运行,
注意删除四个无用文件:
3. 项目目录介绍和 Hello world
Spring Boot 目录说明
新建的Spring Boot项目的目录结构如下:
首先在项目底下有个src目录, src是项目的源, 在src下面有两个重要的文件包"main"和"test", 在main下的java包(为蓝色图标)是这个项目的java源代码, 所有的源代码都在这个包中, 也只有这个包能创建出.java.
另外一个重要的包resources则是存放资源和配置信息, 资源又分为两大类, 其中statics和templates是用来放前端文件的资源, application.properties是当前整个项目的配置文件.
和main同级的test, 是用来进行测试的包, 底下的java包(为绿色的图标)表示单元测试的代码.
运行显示Hello world
我们学习这一部分知识就是为了用于实现Web项目或接口的, 而之前是Spring其实是一个普通的Java项目, 没有办法直接和浏览器进互动, 所以接下来我们要使用Spring Boot来实现和浏览器及用户的交互.
在创建的项目包下创建TestController文件(注意一定要和启动类同一目录), 实现代码如下:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("/sayHi") // 相当于以前 Servlet 中的 @WebServlet("/url")
public String sayHi(){
return "Hello world";
}
}
当我们启动项目并在Edge输入URL:"localhost:8080/sayHi"之后却看到没有按照预期结果显示, 这里的成因是默认情况下它以为我们返回的是名字叫做"Hello world"的静态页面, 所以它会去找我们statics中的这个页面, 结果发现这个页面不存在, 所以它是404, 那么为什么它会认为我们返回的是一个页面而不是一个字符呢?
Spring Boot最早是叫做Spring MVC, Spring MVC最早返回的就是一个视图, 所以Spring Boot就是返回一个视图, 那么我们可以通过加@ResponseBody来解决这个问题, 下面是最终的代码:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class TestController {
@RequestMapping("/sayHi") // 相当于以前 Servlet 中的 @WebServlet("/url")
public String sayHi(){
return "Hello world";
}
}
重启项目并重新输入URL打开之后,
可以看到显示了"Hello world".
约定大于配置
问题: 在TestController中添加类注解@Controller, 之前的Spring中需要配置base_package, 而在Spring Boot中不需要做也能注册到Spring中, 是如何做的?
它依靠的就是Spring Boot的设计理念: 约定大于配置.
约定大于配置就是, Spring提供了一个规则给我们, 接下来没有商量, 也不需要配置, 就按照它的约定来, 它的约定是, 我们想要把类加载到Spring中, 就必须要和启动类同一路径下, 这是Spring Boot的一个"死约定".
如何体现? 我们把这个TestController放到和启动类不同路径下, 然后运行并访问URL, 会发现变成404了.