继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

怎样学习 SpringBoot

2019-07-31 11:18:419090浏览

张勤一

6实战 · 22手记 · 14推荐
TA的实战

学习 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的新名字,这个名字只是让名字看起来简单些

······························
欢迎关注课程:

打开App,阅读手记
51人推荐
发表评论
随时随地看视频慕课网APP

热门评论

跟大神学spring

感谢大神分享,刚好入门

查看全部评论