1. 概述
1.1 什么是SpringBoot
springBoot
SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品,设计目的是用来简化新Spring应用的初始搭建以及开发过程
最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置
1.2 为什么要学习SpringBoot
之前
① 复杂的配置
项目各种配置其实是开发时的消耗,写配置挤占了写应用程序逻辑的时间
② 混乱的依赖管理
项目当中添加很多库已经很麻烦了,还要知道这些库的哪个版本和其他库不会有冲突,一旦选错了依赖的版本,随之而来的不兼容问题就会造成项目的致命性伤害
现在
① Spring Boot 简化了基于Spring的应用开发
② 只需要“run”就能创建一个独立的、生产级别的Spring应用
③ Spring Boot为Spring平台及第三方库提供开箱即用的设置
1.3 SpringBoot特点
① 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
② 开箱即用,通过简单的配置,简化了以前复杂配置操作
③ 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
④ 无需 XML 配置
1.4 springBoot功能
① 以jar包方式独立运行(jar -jar xxx.jar)
② 内嵌Servlet容器(tomcat, jetty),无需以war包形式部署到独立的servlet容器中
③ 提供starter简化maven依赖包配置
④ 自动装配bean(大多数场景)
⑤ 提倡使用java配置和注解配置结合而无需xml配置
2. springBoot快速入门
浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;
①. 创建一个maven工程
②. 导入spring boot相关的依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
③ 编写一个主程序,启动Spring Boot应用
启动类要放在所有包的父目录,因为他只会扫描启动类当前包和以下的包
还有一种解决方案是 在启动类的上面添加 @ComponentScan(basePackages = {"要扫描的包"})
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
④ 编写相关的Controller
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
⑤ 运行主程序测试
⑥ 简化部署
可以将这个应用打成jar包,直接使用java -jar的命令进行执行
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如遇到spring boot run启动时非常缓慢使用以下方法
-
在命令行中输入hostname 查询当前主机名称
-
到C盘Windows\System32\drivers\etc中找到host文件
-
复制一份其它地方进行编辑,编辑时在hostname之后添加.local
-
注意事项: 127.0.0.1和local之间是两个tab 不是空格
⑦ 热部署配置
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
3. Hello World探究
POM文件
父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
进入父项目发现父项目还依赖于spring-boot-dependencies
父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
在spring-boot-dependencies
真正管理Spring Boot应用里面的所有依赖版本;他就是Spring Boot的版本仲裁中心;以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter
:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件
这些依赖受到上面说到的版本仲裁中心的仲裁
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
主程序类,主入口类
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication:
Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
其中
@SpringBootConfiguration
:
Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类;
@Configuration
表示这是配置类
@EnableAutoConfiguration:
开启自动配置功能;以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration
告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
@AutoConfigurationPackage
:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication
标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器(这也就是为什么上面入门程序的时候把启动类放在所有类的父类中)
@Import(EnableAutoConfigurationImportSelector.class)
;给容器中导入组件,会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件,有了自动配置类,免去了我们手动编写配置注入功能组件等的工作
4. 使用Spring Initializer快速创建Spring Boot项目
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;
- 主程序已经生成好了,我们只需要我们自己的逻辑
- resources文件夹中目录结构
- static:保存所有的静态资源; js css images;
- templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;