关键字
感性认识、搭建步骤
1. 上期回顾
上一章我们对spring boot有了一个初步认识,了解了它产生的原因以及所能解决的问题。但是对于初学者过于理论化,今天按照国际惯例,我们从无到有的搭建一个hello world项目,以对spring boot有一个更感性的理解。
在此之前回顾一下上期内容:spring boot的目标:简化spring项目从搭建到部署监控整个流程中的重要环节。
上期关键字:简化。
今天我们就用一个实例,以点到为止的方式了解spring boot项目的搭建步骤、以及简化过程。
2. 目标
- 搭建一个简单的spring boot项目
- 对spring boot有一个感性认识
- 验证是否简化了项目流程
- 简单了解spring boot的启动流程
- spring boot版本:1.5.4.RELEASE
- jdk版本: 7及以上版本
- spring framework:4.3.9及以上版本
- 内置tomcat版本:8
3.1 项目结构
spring boot项目与普通项目无任何区别,理论上项目结构不需要特殊要求,但为了后续简化配置,推荐一个常用的项目结构。
在intellj idea中创建maven项目如下:
demo-springboot
+- src
+- main
+- java
| +- com
| +- blog
| +- demo
| +- springboot
| +- App.java
| |
| +- controller
| | +- HelloController.java
| |
| +- service
+- resources
+- application.yml
- 不要使用"default"包
- MainClass位于root包下
3.2 依赖
在项目中创建pom.xml文件,内容如下:
<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>
<name>demo-springboot</name>
<!--当前项目配置-->
<groupId>com.flypigs</groupId>
<artifactId>demo-springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包类型:jar/war-->
<packaging>jar</packaging>
<!--属性配置:可以用于覆盖默认属性,如默认jar的版本号-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--引入spring boot:提供了Maven默认配置,以及dependencyManagement-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<!--依赖-->
<dependencies>
<!--引用spring web:得益于spring-boot-starter-parent中的parent中的dependencyManagement,此处可以不指定版本号-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--构建fatJar的插件:jar中jar并不是java标准,是spring自己实现的特性,因此需要引用spring的特殊插件来实现jar包构建-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 继承spring-boot-starter-parent
- 引入spring-boot-starter-web
- 设置spring-boot-maven-plugin
3.3 编码和配置
创建App.java,代码如下:
package com.blog.demo.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Hello world!
*
*/
@Configuration
@ComponentScan //扫描包,并根据相应注解创建bean
@EnableAutoConfiguration //启动自动配置
//@SpringBootApplication //(为了简单方便,当前注解可以替换上面三个注解)
public class App
{
public static void main( String[] args )
{
//项目启动入口:
// A:启动tomcat等web容器(如果是web项目)
// B:初始化并启动spring(根据当前类配置的注解),进入spring生命周期
SpringApplication.run(App.class,args);
}
}
package com.blog.demo.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.*;
/**
* Created by yangsp1 on 17/7/27.
*/
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/user/{userName}")
@ResponseBody
public Map<String,Object> sayHello(@PathVariable(name = "userName") String userName){
Map<String,Object> result = new HashMap();
String hello = userName == null ? "i don't know who you are" : userName + ", hello , i am baymax";
result.put("msg",hello);
result.put("status","ok");
return result;
}
}
创建application.yml配置文件如下:
#应用名称(非必须,推荐每个项目都起一个唯一的名称,方便后面管理及配置使用)
spring:
application:
name: springBootDemo
#web容器端口(默认是8080,此处手动覆盖默认值)
server:
port: 9090
3.4 容器
参见3.2节中的spring-boot-starter-web依赖。它可以引入一个内置的tomcat 包。
3.5 监控
略,为了不让hello world过于复杂,此处略过,后续涉及
3.5 启动并验收
ide中运行App.java
浏览器中运行如下链接:http://local.dooioo.net:9090/hello/user/laoyang
结果如下:
是不是很简单,只配置了一个 pom.xml文件,编写了一个main class和一个HelloController并加入了几个注解,最后设置了一个yml配置文件,就成功搭建成一个完整的web项目。
4. 过程分析
使用spring boot真的太简单方便了,可是开心之余你是否有一点点不安。它太简单了,可是为什么这么简单?它到底做了什么?如果出错如何解决?想要集成新功能该如何下手?
有时一头雾水会使因简单带来的优势微不足道。所有简单的使用都是建立在熟悉、理解的基础上。如果只是懵懵懂懂的使用,最多也是一个熟练使用ctrl+c ctrl+v的代码搬运工。如果完全理解了spring boot的原理和执行过程,则会越用越简单。下面我就简单的分析一下项目整个执行过程。
4.1 依赖
一个简单的配置加载所有依赖包:创建pom.xml,配置spring-boot-starter-web依赖,利用构建工具maven ,把web项目所需要的jar包全部加载到项目中。
4.2 编码
- 创建一个启动类:App main class,并配置三个注解。
- 创建一个业务类:HellowController,并配置Spring MVC注解
4.3 配置
- bean注解配置(编码阶段)
- 组件配置(如:yml中tomcat端口配置)
- 自动配置(@EnableAutoConfig自动配置了spring MVC)
4.4 执行
执行流程有很多细节和步骤,最核心的主要为以下两大步骤:
- 加载spring框架
- 启动tomcat容器
5. 接下来
到目前为止,我们知道了spring boot为何而生,也对其实践有了一个感性认识。下面,我们将详情了解spring boot有哪些特性