一、SpringBoot简介
1、SpringBoot基础介绍
Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。我们为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。你可以使用Spring Boot创建Java应用,并使用java -jar启动它或采用传统的war部署方式。
1.1、解决的问题
- 依赖太多了,且存在版本问题。
- 配置太多了且每次都一样,大部分工程配置每次都是一样的,从一个地方拷贝到另外一个地方;且Spring发展10多年,各种配置版本太多,对于很多程序员来说分不清哪个是有效、哪个无效。
- 部署太麻烦,需要tomcat部署,项目结构也需要照着Java EE的目录结构来写。
1.2、SpringBoot特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置
1.3、SpringBoot功能
自动配置(auto-configuration):
一项简化配置的功能,比如在classpath中发现有spring security的jar包,则自动创建相关的bean等。
starters(简化依赖):
这个比较关键,方便spring去集成各类组件,比如redis、mongodb等等。
2、系统要求
默认情况下,目前使用SpringBoot 2.2.1最新版本,最好安装JDK8以及以上的版本,maven使用3.3或者以上的版本。
3、第一个SpringBoot项目
新建一个普通maven项目,创建pom文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.1、编写代码:
为了完成应用程序,我们需要创建一个单独的Java文件,Maven默认会编译src/main/java下的源码。
新建:com.chj.Example.java
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
3.2、@RestController和@RequestMapping说明
1)@RestController:这被称为一个构造型(stereotype)注解,它为阅读代码的人们提供建议。对于Spring该类扮演了一个特殊角色,在本示例中,我们的类是一个web @Controller,所以当处理进来的web请求时,Spring会询问它。
RestController源码如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
2)@RequestMapping注解提供路由信息:它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到home方法,@RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
3)@EnableAutoConfiguration:这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
4)main方法:这只是一个标准的方法,它遵循Java对于一个应用程序入口点的约定。我们的main方法通过调用run,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用,启动Spring,相应地启动被自动配置的Tomcat web服务器;我们需要将Example.class作为参数传递给run方法来告诉SpringApplication谁是主要的Spring组件。
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class[]{primarySource}, args);
}
执行main方法,使用一个浏览器打开 localhost:8080,以下输出:Hello World!
4、注意事项
Spring Boot不需要使用任何特殊的代码结构,然而这里有一些地方需要注意。
4.1、使用"default"包
当类没有包含package声明时,它被认为处于default package下,通常不推荐使用default package,并应该避免使用它;因为对于使用@ComponentScan,@EntityScan或@SpringBootApplication注解的Spring Boot应用来说,来自每个jar的类都会被读取,这会造成一定的问题。
4.2、定位main应用类
通常建议你将main应用类放在位于其他类上面的根包(root package)中,通常使用@EnableAutoConfiguration注解你的main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索@Entity项。
使用根包允许你使用@ComponentScan注解而不需要定义一个basePackage属性,如果main类位于根包中,你也可以使用@SpringBootApplication注解。
二、SpringBoot快速入门
1、spring-boot-starter-parent使用
可以继承spring-boot-starter-parent项目来获取合适的默认设置,想配置你的项目继承spring-boot-starter-parent只需要简单地设置parent为:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
备注:
你应该只需要在该依赖上指定Spring Boot版本,如果导入其他的starters,你可以放心的省略版本号。
使用没有父POM的Spring Boot:
不是每个人都喜欢继承spring-boot-starter-parent POM,你可能需要使用公司标准parent,或你可能倾向于显式声明所有Maven配置。如果你不使用spring-boot-starter-parent,通过使用一个scope=import的依赖,你仍能获取到依赖管理的好处:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、搭建springboot环境
2.1、新建App.java
@SpringBootApplication
public class App {
public static void main( String[] args ) {
SpringApplication.run(App.class, args);
}
}
2.2、新建Controller:
@RestController
public class UserController {
@RequestMapping("/hello")
public Object sayHello() {
return "hello";
}
}
运行App,在浏览器输入:localhost:8080/hello,发现“hello”说明第一步部署成功。
3、集成mybatis
https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/1.3.5
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId