SpringBoot简介
- SpringBoot让我们的Spring应用更加的轻量化;比如:我们可以靠一个Java类来运行一个Spring的引用。也可以通过运行jar包的方式java -jar 来运行自己的Spring Web应用。
- Spring Boot的优点:
(1)为所有Spring开发者更快的入门
(2)开箱即用,提供各种默认配置来简化项目配置
(3)内嵌式容器简化Web项目
(4)没有冗余代码生成和XML配置的要求 - SpringBoot是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解的形式,内置Web容器,帮助开发者能够快速开发,SpringBoot的Web组件默认集成SpringMVC框架,SpringMVC是控制层
- SpringBoot通过maven的继承原理实现了版本的统一管理
- SpringBoot的Web环境启动默认使用Tomcat且端口号是8080
SpringBoot和SpringMVC的区别
- SpringBoot是一个快速开发的框架,能够整合第三方框架,简化XML配置,全部采用注解的形式,内置Web容器,帮助开发者能够快速开发,SpringBoot的Web组件默认集成是SpringMVC框架
- SpringMVC是控制层的框架
SpringBoot 和 SpringCloud的区别
- SpringBoot是一个快速开发的框架,能够整合第三方框架,简化XML配置,全部采用注解的形式,内置Web容器,帮助开发者能够快速开发,SpringBoot的Web组件默认集成是SpringMVC框架
- Spring Cloud依赖与SpringBoot的组件,使用SpringMVC编写Http协议接口,同时SpringCloud是一套完整的微服务解决框架,通信协议是Http+Json格式
- 如果需要做微服务的话,就要用SpringCloud整合SpringBoot,如果项目中不使用SpringCloud,可能就是不需要实现微服务
- SpringBoot不是一个微服务框架只是一个快速开发的框架
系统要求
- Java1.8以及以上
- Spring Framework 4.1.5 以及以上
创建SpringBoot工程
- 步骤:
(1)创建一个Maven工程(这里不用脚手架的方式创建)
(2)创建的时候项目类型是jar类型,即使是web项目
(3)引入SpringBoot的maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- maven的< parent>标签的作用是聚合工程,指明该pom文件的父类,有继承关系
- 其中重点介绍几个maven依赖的作用:
(1)spring-boot-starter-parent
- 在pom.xml中引入spring-boot-starter-parent,spring官方的解释叫做starter poms,他可以提供给dependency management,也就是说依赖管理,引入之后再申明其他dependency的时候就不需要写版本号,进行了统一版本的管理
(2)spring-boot-starter-web
- springBoot提供的web组件的核心,整合了SpringMVC,把传统方式的SpringMVC的依赖的jar包全部下载下来,整合好所有相关的依赖jar包,原理就是利用了maven的依赖传递,spring-boot-starter-web里面依赖了相关的SpringMVCjar包
(3)spring-boot-maven-plugin
- 如果我们要直接通过Main函数启动Spring,该plugin一定要添加,否则是无法启动的,如果我们使用maven的spring-boot:run的方式启动,则该组件不需要配置(我试验了下加不加都可以,反正别人都加上了,那就加上吧,可以使用maven相关插件)
常用注解介绍:
-
@RestController
该注解的意思相当于是@Controlelr+@ResponseBody(对象->json,返回的是json对象。@RequestBody和其正好相反,穿传来的是json将其转为对象),一般该注解放在class类上,如果做微服务的时候,一般都要在类上加上该注解
@RestController修饰的类下的所有方法,全部都是返回json格式,这样的话就不用在每个方法上加@ResponseBody了 -
@EnableAutoConfiguration
作用就是开启自动装配,自动加载jar包,作用在于让SpringBoot根据应用所声明的依赖来对Spring框架进行自动装配。该注解告知SpringBoot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和SpringMVC,所以@EnableAutoConfiguration将假定你在开发一个web应用,并相应的对Spring进行设置。 -
@ComponentScan
扫包的范围,如果我们不加扫包,我们启动SpringBoot的时候,只能识别到当前类的注解。
例如定义了两个Controller,A和B,main函数在 A 中,没有配置@Compenent,这时候我们启动之后,只能访问到A中的映射,B中的访问不到。因为我们没有配置自动扫包只能加载到main函数所在类的注解
SpringBoot的三种启动方式
(1)直接使用@EnableAutoConfiguration来进行,只能识别当前的类上的注解
package com.xiyou.myspringboot.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 第一种SpringBoot的启动方式
* 使用@EnableAutoConfiguration,开启自动注入,只能识别本类的注解,因为没有配置@Component
*/
@RestController
@EnableAutoConfiguration
public class HelloController {
@GetMapping("/hello")
public String index() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
(2)利用@ComponentScan和@EnableAutoConfiguration进行扫描
- HelloController
package com.xiyou.myspringboot.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String index() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
- HiController
package com.xiyou.myspringboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 第二个Controller
*/
@RestController
public class HiController {
@GetMapping("/hi")
public String sayHi(){
return "hi~";
}
}
- App.java
package com.xiyou.myspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = "com.xiyou.myspringboot.controller")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
- 架构图:
(3)利用@SpringBootApplication(常用) - 架构:
- HiController
package com.xiyou.myspringboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 第二个Controller
*/
@RestController
public class HiController {
@GetMapping("/hi")
public String sayHi(){
return "hi~";
}
}
- HelloController
package com.xiyou.myspringboot.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String index() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
- MySpringbootApplication
package com.xiyou.myspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringbootApplication.class, args);
}
}
SpringBoot的静态资源访问
-
如果在类上加载了@RestController,则不会跳转到页面,就是前后端分离,返回的都是JSON数据,而不是跳转到某一个页面。
-
动态页面静态化(SEO技术,就是做搜索引擎优化)
就是相当于将动态页面转换成伪HTML页面 -
在我们开发Web应用的时候,需要引入大量的JS,CSS,图片等静态资源。
-
重要:Spring Boot中默认提供了静态资源目录位置需要置于classpath下,也就是说我们在resource目录下需要建立目录名满足以下要求:
(1)/static
(2)/public
(3)/resources
(4)/META-INF/resources
举例说明:我们在src/main/resources/目录下创建static目录,在该位置上放置一个图片文件,启动程序后,尝试访问http://localhost:8080/D.jpg。如果显示图片,配置成功