什么是Spring Boot?

传统SSH/SSM框架配置繁琐,有很多重复的模板配置,效率不高。

Spring Boot快速创建可独立运行,生产级别的Spring应用程序。

主要是基于Spring家族和常用第三方框架/库提供一些列自动化配置的启动器(Starter),进而能够快速搭建开发项目。

Spring Boot有哪些特点?优点缺点?

特点: 快速构建Spring项目,自动配置,降低学习门槛。

优点: 快速开发,简化配置,独立运行部署,应用监控,适合构建微服务。

缺点:集成度太高,不容易了解底层,难定位问题。

Spring Boot核心配置文件有哪几个?区别?应用场景?

核心配置文件:application.yml和bootstrap.yml。

区别:bootstrap是应用程序父上下文,加载优先于application。bootstrap里的属性不能被覆盖。

应用场景:

application:主要用于Spring Boot项目的自动化配置。

bootstrap:

  • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
  • 一些固定的不能被覆盖的属性;
  • 一些加密/解密的场景;

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类注解 @SpringBootApplication。包括3个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,

如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

开启 Spring Boot 特性有哪几种方式?

1. 继承spring-boot-starter-parent项目

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.X.X.RELEASE</version>

</parent>

2. 导入spring-boot-dependencies项目依赖

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>2.X.X.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencyManagement>

运行 Spring Boot 有哪几种方式?

1. 打包用命令行或者放入容器中运行

2.用Maven/Gradle插件运行。$ mvn spring-boot:run

3.直接执行main方法运行

如何在 Spring Boot 启动的时候运行一些特定的代码?

可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。

启动顺序,如果启动的时候有多个ApplicationRunner和CommandLineRunner,想控制它们的启动顺序,可以实现 org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解。

Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。

例如:

读取application文件:

info.address=Beijing
info.company=Abc
info.degree=high

@Value注解读取方式:

@Value
("${info.address}")
private String address;

读取指定文件:

资源目录下建立config/db-config.properties:

db.username=root
db.password=123

@PropertySource+@Value注解读取方式:

@Component
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig1 { @Value("${db.username}")
private String username; @Value("${db.password}")
private String password;
...
}

@PropertySource+@ConfigurationProperties注解读取方式:

标有 @ConfigurationProperties 的类的所有属性和配置文件中相关的配置项进行绑定,绑定之后我们就可以通过这个类去访问全局配置文件中的属性值,不用像@Value的方式去一个一个的取。

@Component
@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig2 { private String username;
private String password;
...
}

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。

SpringBoot 实现热部署有哪几种方式?

  • Spring Loaded (过时)
  • Spring-boot-devtools

Spring Boot配置加载顺序?

1. properties文件

2. YAML文件

3. 系统环境变量

4.命令行参数

保护 Spring Boot 应用有哪些方法?

  • 1. 在生产中使用HTTPS
  • 2.使用Snyk检查你的依赖关系
  • 3.升级到最新版本
  • 4.启用CSRF保护
  • 5.使用内容安全策略防止XSS攻击
  • 6.使用OpenID Connect进行身份验证
  • 7.使用密码哈希
  • 8. 安全地存储密码
  • 9. 使用OWASP的ZAP测试应用程序
  • 10. 让安全团队进行代码审查

Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

配置变更,JDK版本升级,第三方类库升级,响应式Spring编程,HTTP/2支持,配置属性板顶。

SpringBoot自动配置原理?

在main()启动SpringBoot时,只有一个注解@SpringBootApplication。这个注解包括3个注解:

@SpringBootConfiguration:点进去以后可以发现底层是Configuration注解,就是支持JavaConfig的方式来进行配置(使用Configuration配置类等同于XML文件)。

@EnableAutoConfiguration:开启自动配置功能(后文详解)

@ComponentScan:这个注解,就是扫描注解,默认是扫描当前类下的package。将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。

Spring Boot的自动配置注解核心是@EnableAutoConfiguration

这个注解可以帮助我们自动载入应用程序所需要的所有默认配置

@AutoConfigurationPackage:自动配置包

@Import:给IOC容器导入组件

1. @AutoConfigurationPackage里依靠的仍然时@Import注解:

AutoConfigurationPackages.Registrar是静态内部类,核心是:

@Override

public void registerBeanDefinitions(AnnotationMetadata metadata,

BeanDefinitionRegistry registry) {

register(registry, new PackageImport(metadata).getPackageName());

}

在默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

@AutoConfigurationPackage是扫描@Entity注解,@ComponentScan是扫描@Controller/@Service/@Component/@Repository这些注解。

两者扫描对象是不一样的。

1.2 AutoConfigurationImportSelector.class

核心实现selectImports中的getAutoConfigurationEntry()->getCandidateConfigurations()

通过SpringFactoriesLoader.loadFactoryNames来加载,进入核心代码:

FACTORIES_RESOURCE_LOCATION的值是META-INF/spring.factories

Spring启动的时候会扫描所有jar路径下的META-INF/spring.factories,将其文件包装成Properties对象

从Properties对象获取到key值为EnableAutoConfiguration的数据,然后添加到容器里边。

[Java复习] Spring Boot的更多相关文章

  1. 框架-Java:Spring Boot

    ylbtech-框架-Java:Spring Boot 1.返回顶部 1. Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该 ...

  2. Java 小记 — Spring Boot 的实践与思考

    前言 本篇随笔用于记录我在学习 Java 和构建 Spring Boot 项目过程中的一些思考,包含架构.组件和部署方式等.下文仅为概要,待闲时逐一整理为详细文档. 1. 组件 开源社区如火如荼,若在 ...

  3. Mysql事务开启方式(客户端+java手动+Spring Boot)

    一:概念 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.举例 我们需要向数据库插入3条数据(我们希望这三条数据要么全部插入成功,要么全部失败), 比如第一条数据插入成功,插入第二条数据 ...

  4. Java框架spring Boot学习笔记(三):Controller的使用

    Controller注解介绍 @Controller:处理http请求 @RestController: Spirng4之后新加的注解,其实是一个组合注解等同于@ResponseBody和@Contr ...

  5. Java框架spring Boot学习笔记(二):Hello Spring Boot、以及项目属性配置

    新建一个新建一个SpringBootTest工程 新建一个HelloController.java文件 package com.example.demo; import org.springframe ...

  6. Java框架spring Boot学习笔记(一):开始第一个项目

    新建一个项目,选择Spring initializr 修改group和项目名 添加依赖包Web,MongoDB 设置保存位置和工程名 新建一个test的文件 输入代码: package com.xxx ...

  7. Java之Spring Boot详解(非原创)

    文章大纲 一.Spring Boot 概述二.Spring Boot 入门案例三.Spring Boot核心功能代码实战四.项目源码与资料下载五.参考文章   一.Spring Boot 概述 1. ...

  8. 部署java的spring boot项目(代码外包提供)

    部署java后台的spring boot 人脸识别系统的项目 基础环境准备: 硬件:内存4g  cpu 4核  硬盘200g  虚拟机 软件:CentOS 7.6  mysql 5.7.26  jdk ...

  9. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

随机推荐

  1. Image Processing and Analysis_15_Image Registration:A survey of medical image registration——1998

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  2. 图解数据库中的各种 JOIN

    本文转载至https://mazhuang.org/2017/09/11/joins-in-sql/#full-outer-join-excluding-inner-join,如需阅读原文请至上述链接 ...

  3. docker安装redis并以配置文件方式启动

    镜像相关 redis镜像 # 不限定版本 docker pull redis # 拉取 redis为4.0.9版本的镜像 docker pull redis:4.0.9 # 拉取之后查看镜像 dock ...

  4. Hive系统函数之collect_list和collect_set

    转自:https://www.cnblogs.com/cc11001100/p/9043946.html Hive中collect相关的函数有collect_list和collect_set. 它们都 ...

  5. python_网络编程socket(UDP)

    服务端: import socket sk = socket.socket(type=socket.SOCK_DGRAM) #创建基于UDP协议的socket对象 sk.bind(('127.0.0. ...

  6. Charles----伪造手机端的request和reponse参数

    使用场景: 在测试中通过伪造reponse数据来模拟某些测试场景,如下截图.要求:通过修改reponse中的值,再次请求修改7为100,只是会显示为99+ 实现方式: 1.通过breakpoints来 ...

  7. kubectl 自动补全

    kubectl 这个命令行工具非常重要,与之相关的命令也很多,我们也记不住那么多的命令,而且也会经常写错,所以命令自动补全是很有必要的,kubectl 工具本身就支持自动补全,只需简单设置一下即可. ...

  8. C# ClickOnce发布方式

    首先编写ClickOnce更新事件, private void button1_Click(object sender, EventArgs e) { if (ApplicationDeploymen ...

  9. BZOJ 3566 概率充电器(树形概率DP)

    题面 题目传送门 分析 定义f(i)f(i)f(i)为iii点不被点亮的概率,p(i)p(i)p(i)为iii自己被点亮的概率,p(i,j)p(i,j)p(i,j)表示i−ji-ji−j 这条边联通的 ...

  10. git 从某一版本拉取新分支,并在新分支合并某几个commit

    场景:需要回退至红框中的那个版本,并且只添加“缓存逻辑优化,增加加载中的状态”这一次commit,其他的commit不添加. 步骤: 1) 切换到指定分支 dev git checkout dev 2 ...