1. Spring Boot 简介
Spring Boot 是由 Pivotal 团队提供的全新框架, 其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而是开发人员不再需要定义样板化的配置。Spring Boot默认配置了很多框架的使用方式,就像Maven整合了所有的jar包,Spring Boot 整合了所有的框架。它的核心设计思想是:约定优于配置,Spring Boot 所有开发细节都是依据此思想进行实现的。
Spring Boot 的优势:
● 使开发变得简单,提供了丰富的解决方案, 快速集成各种解决方案提升开发效率。
● 使配置变得简单,提供了丰富的Starters,集成主流开源产品往往只需要简单的配置即可。
● 使部署变得简单,其本身内嵌启动器,仅仅需要一个命令即可启动项目,结合 Jenkins、Docker 自动化运维非常容易实现。
● 使监控变得简单,自带监控组件,使用 Actuator 轻松监控服务各项状态.
2.构建项目
依赖环境: 1.8以上版本的jdk
构建工具: Ant、Maven 和 Gradle,在这里我们用Maven
开发工具: Eclipse、idea(推荐使用idea)
2.1使用 Spring 官方提供页面构建
- 访问 http://start.spring.io/
- 选择构建工具 Maven Project、Java、Spring Boot 版本 2.1.16、Spring Web依赖以及一些工程信息,如下
- 点击 Generate-Ctrl+ 下载项目压缩包
- 解压后,使用idea导入项目,File > New > Model from Existing Source… > 选择解压后的文件夹 > OK,选择 Maven 一路 Next,OK done!
- 如果是使用 Eclipse, Import > Existing Maven Project > Next > 选择解压后的文件夹 > Finsh,OK done!
2.2 使用IDEA构建
- 选择 File > New > Project…
- 选择 Spring Initializr,Next 也会出现上面类似的配置界面,IDEA 帮我们做了集成。如果没有 Spring Initializr选项,可以进入 Settings,选择Plugins,输入 spring 搜索,找到 Spring Boot 勾选上,再重启就可以了。
3. pom 包介绍
pom.xml 文件主要描述了项目包的依赖和项目构建时的配置, 在默认的 pom.xml 包中分为四大模块。
- 第一部分为项目描述信息:
<groupId>com.aiweiyi</groupId><!--公司域名-->
<artifactId>demo</artifactId><!--项目名称-->
<version>0.0.1-SNAPSHOT</version><!--项目版本号-->
<name>demo</name><!--项目名称-->
<description>Demo project for Spring Boot</description><!--项目描述-->
- 第二部分为项目的依赖配置信息:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
● parent, 标签内配置Spring Boot父级版本spring-boot-starter-parent, Maven 支持项目的父子结构,引入父级后会默认继承父级的配置;
● dependencies, 标签内配置项目所需要的依赖包,Spring Boot 体系内的依赖组件不需要填写具体版本号,spring- bot-starter-parent维护了体系内所有依赖包的版本信息。
● 本项目的依赖除了我们自己勾选的spring-boot-starter-web外,还默认包括了spring-boot starter-test, spring-boot starter-test是Spring Boot提供项目测试的工具包,内置了多种测试工具,方便我们在项目中做单元测试、集成测试。
- 第三部分为构建时需要的公共变量:
<properties>
<java.version>1.8</java.version>
</properties>
此处默认只指定了项目使用的JIDK 版本,我们通常还会指定使用的字符编码等。
- 第四部分为构建配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
使用Maven 构建Spring Boot 项目必须依赖于spring-boot-maven-plugin 组件,
sringboot-maven-plugin能够以Maven的方式为应用提供Spring Boot 的支持,即为Spring Boot应用提供了执行Maven 操作的可能。sringboot-maven-plugin 能够将Spring Boot应用打包为可执行的jar 或war文件,然后以简单的方式运行Spring Boot应用。
4. 代码编写
这里演示一下在页面上输出 Hello World!
public interface DemoService {
public String hello();
}
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String hello() {
return "Hello World!";
}
}
@RestController
public class HelloController {
@Resource
private DemoService demoService;
@RequestMapping("/hello")
public String hello(){
String m = demoService.hello();
return m;
}
}
5. Spring Boot 的核心
约定优于配置
约定优于配置(Convention Over Configuration),也称作按约定编程是一种软件设计范式。目的在于减少软件开发人员所需要做出的决定的数量,从而获得简单的好处,而又不失去其中的灵活性。开发人员仅仅需要规定应用中不符合约定的部分。
例如, 如果模型中有个名为 User 的类, 那么数据库中对应的表就会默认命名为user。只有在偏离这一约定时,例如将该表命名为“user_info”,才需要写有关这个名字的配置。
Starters 启动器
Starters 可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring Data JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。
Spring Boot Starter基于约定优于配置的理念来设计,Spring Boot Starter中有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。也就意味着当我们项目中引入某个Starter,即拥有了此软件的默认使用能力,除非我们需要特定的配置,一般情况 下我仅需要少量的配置或者不配置即可使用组件对应的功能。
可以参考: starter
自动配置工作原理
@SpringBootApplication 注解启动类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
这个@SpringBootApplication注解里面又包括三个注解: @SpringBootConfiguration: SpringBoot配置; @EnableAutoConfiguration: 自动配置;
@ComponentScan: 组件扫描。
@SpringBootConfiguration 注解里又包含 @Configuration 注解,使用@Configuration注解标注的类表示一个配置类,可以替代以前的xml配置文件配置Bean。该注解意味着我们在启动类中可以添加带有@Bean注解的方法,进行一些配置。
@ComponentScan注解表示扫描组件,以前在SSM中也使用过组件扫描,启用注解配置。启动类上间接包含该注解,表示会扫描启动类所在包及子包下的注解配置。
@EnableAutoConfiguration 注解从名字就可以看出,Spring Boot由该注解开启自动配置。它主要通过@Import 注解导入AutoConfigurationImportSelector 类。