怎样学习 SpringBoot

829 阅读5分钟

  学习 SpringBoot 需要做哪些准备?

  IDE:IDEA

  基础工具:JDK1.8、Maven

  SpringBoot 背景介绍

  什么是 SpringBoot

  Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置

  Spring Boot提供了各种组件的启动器(starter),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目

  Spring Boot不但能创建传统的 war 包应用,还能创建独立的不依赖于任何外部容器(如:tomcat)的独立应用,使用 java -jar 命令就能启动

  SpringBoot 的设计目标

  为 Spring 应用开发提供一个更快、更容易上手的入门体验

  提供一系列在经常用到的公共的非功能性特性,如:内嵌入服务器、安全、度量指标、健康检测、外部化配置

  零代码配置生成及零 XML 配置

  SpringBoot 包含哪些特性

  首先,需要知道,SpringBoot 工程(应用)与普通的 Java/Spring 应用没有任何区别,或不一样的实现形式。简单的说,你只要在 pom 文件中加上了 SpringBoot 所必须的 parent 和相关依赖,这就是一个 SpringBoot 应用。

  当你理解了 Spring,学习 SpringBoot,是一件很简单的事,因为它只是简化了对 Spring 的使用与配置。除此之外,它也提供了一些功能强大且方便的特性。这里,我介绍一些最为常用的特性。

  应用启动入口

  注解 @SpringBootApplication

  三种启动方式

  SpringApplication 的静态方法 run

  通过 SpringApplication 的 Api调整应用行为

  SpringApplicationBuilder 的 Fluent Api,可以实现链式调用

  自动配置的原理

  简单的说,自动配置就是会根据在类路径中的jar、类自动配置Bean。Spring Boot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些starter,相关场景的所有依赖都会导入进来。

  自动配置的实现是基于三个重要的注解实现的(实际就是 @SpringBootApplication 注解):

  @SpringBootConfiguration 类似于 @Configuration

  @EnableAutoConfiguration 开启自动配置的功能

  @ComponentScan 扫描注解,扫描 classpath 下的定义的 bean,即 将@Controller、@Service、@Component、@Repository等注解加载到IOC容器中

  配置文件优先级

  同一个目录下的 application 和 bootstrap

  bootstrap 优先级高于 application,优先被加载

  bootstrap 用于应用程序上下文的引导阶段,由父 ApplicationContext 加载

  bootstrap 是系统级别的配置(不变的参数),application 是应用级别的配置

  不同位置的配置文件加载顺序(优先级)

  file:./config/ - 优先级最高(项目根路径下的 config)

  file:./ - 优先级第二(项目根路径下)

  classpath:/config/ - 优先级第三(项目 resources/config 下)

  classpath:/ - 优先级第四(项目 resources 目录下)

  高优先级覆盖低优先级相同配置、多个配置文件互补

  配置注入的方式

  直接使用 @Value

  使用 @ConfigurationProperties + prefix 的方式

  Jackson 的使用技巧

  通常在项目中处理JSON一般用的都是阿里巴巴的fastjson, 后来发现使用Spring Boot内置的Jackson来完成JSON的序列化和反序列化操作也是非常方便的。

  @JsonProperty,作用在属性上,用来为JSON Key指定一个别名

  @Jsonlgnore,作用在属性上,用来忽略此属性

  @JsonIgnoreProperties,忽略一组属性,作用于类上

  @JsonFormat,用于日期格式化

  Jackson通过使用ObjectMapper的writeValueAsString方法将Java对象序列化为JSON格式字符串

  反序列化使用 ObjectMapper 的 readValue

  定时任务

  在 SpringBoot 中开启定时任务需要做两件事:

  @EnableScheduling:允许当前的应用开启定时任务

  @Scheduled:指定定时任务的运行规则

  异步任务

  通常代码都是顺序执行(一行一行的执行),这也就是同步调用。但是异步编程却没有这样的限制,代码执行并不是阻塞的。可以直接调用不用等待返回,而是在某一个想要获取结果的时间点再去获取结果。在 SpringBoot 应用中编写异步代码:

  引入spring-boot-starter-web依赖

  在SpringBoot入口类上加上 @EnableAsync 注解,开启异步支持

  只需要在方法上加上 @Async 注解,则当前方法就是异步方法

  默认情况下的异步线程池配置使得线程不能被重用,每次调用异步方法都会新建一个线程,我们可以自己定义异步线程池来优化。

  单元测试

  编写单元测试可以帮助开发人员编写高质量的代码,提升代码质量,减少Bug,便于重构。SpringBoot提供了一些实用程序和注解,用来帮助我们测试应用程序,在SpringBoot中开启单元测试只需引入spring-boot-starter-test即可,其包含了一些主流的测试库。

  一个标准的SpringBoot测试用例应该包含两个注解:

  @SpringBootTest:意思是带有 SpringBoot 支持的引导程序,其中提供了可以指定 Web 环境的参数

  @RunWith(SpringRunner.class):告诉JUnit运行使用Spring的测试支持。SpringRunner是SpringJUnit4ClassRunner的新名字,这个名字只是让名字看起来简单些