Veiking百草园


JAVA面试题锦集-Spring(SpringBoot)

程序员甲   @Veiking   2020-05-21

JAVA面试题锦集-Spring(SpringBoot)

摘要:

SpringBoot是Spring组件一站式解决方案,极大简化了Spring框架的使用难度,省去繁琐的配置,提供便捷的启动器,使开发者能快速上手。SpringBoot技术应用是基于Spring框架的,所以天然的拥有庞大的优良技术种群,并提供了一系列大型项目通用的非业务性功能组件,如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等

Spring Boot是什么

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了Spring框架的使用难度,省去了繁琐的配置,提供了便捷的启动器,开发者能快速上手

为什么要用 Spring Boot?

Spring的优点就不说了,SpringBoot的优点也非常多,下边列出来:
独立运行:内嵌服务器,一个服务器只服务于一个程序,契合微服务理念;
开箱即用:免去繁琐的XML配置,无需额外的代码生成;
版本统一:借助Maven等版本管理工具,对组件版本进行统一规范,避免了很多版本冲突问题;
功能强大:提供了一系列大型项目通用的非业务性功能组件,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等;
组件丰富:SpringBoot技术应用是基于Spring框架的,所以天然的拥有庞大的优良技术种群,可以非常简单的集成各种主流框架;
上手容易:非常贴切的诠释开箱即用,避免繁琐的配置,提供简洁的开发范式,只要用过,都会深有体会。

什么是 JavaConfig?

Spring JavaConfig 是 Spring 社区提供的一个产品,它可以帮助我们实现配置 Spring IoC 容器的纯Java 方法,从而避免使用 XML 配置
使用 JavaConfig 的优点在于:
(1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
(2)减少或消除 XML 配置。基于依赖注入的配置方式的好处已被证明。但是,许多开发人员不希望在XML 和 Java 之间来回切换。JavaConfig 便是为开发人员提供了一种纯 Java方法来配置与 XML 同样工作效果的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是非常可行的,实际上也有很多人认为JavaConfig 与 XML 组合使用的匹配方式是最理想的。
(3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 以后对泛型的支持,现在我们可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

Spring Boot 是否可以使用 XML 配置 ?

Spring Boot 推荐使用纯 Java 方式配置而非 XML 方式,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解即可引入一个 XML 配置。

Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 applicationbootstrap 配置文件。

其中application 配置文件是Spring Boot基本的配置文件,主要用于项目的自动化配置。

关于bootstrap,单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在使用 Spring Cloud 方案时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。bootstrap 配置文件使用场景相对特殊:
1.使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中需添加连接到配置中心的配置属性,来加载外部配置中心的配置信息;
2.一些固定的不能被覆盖的属性
3.一些加密/解密的场景
此外我们需要特别注意的是,boostrap 里面的属性不能被覆盖。

Spring Boot 的配置文件有哪几种格式?它们有什么区别?

.properties 和 .yml,它们的区别主要是书写格式不同。
a.properties

app.user.name = javastack

b.yml

app:
  user:
    name: javastack

不难看出.yml格式配置文件更能体现结构分层,可读性非常好,相对清晰。

此外,.yml配置的方式还支持有序,在特殊的场景下,配置内容加载有序可能会很关键;.yml方式还支持数组,且数组中的元素可以是基本数据类型也可以是对象。

出去这些,我们需要注意的是,.yml的配置不支持 @PropertySource 注解导入配置;此外还要留意.yml的缩进方式,比如多余的空格,都可能使配置属性失效。

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

1,@Value注解读取方式

@Value("${db.username}")
private String username;

2,@ConfigurationProperties注解读取方式

@ConfigurationProperties(prefix = "db ")

3,读取指定文件

@PropertySource(value = { "config/db-config.properties" })

注意:@PropertySource不支持yml文件读取。

4,@PropertySource+@ConfigurationProperties组合式读取

@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })

5,Environment读取方式
以上所有加载出来的配置都可以通过Environment注入获取到。

@Autowired
private Environment env;

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

在Springboot项目中,启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合了以下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>1.5.6.RELEASE</version>
    </parent>
    
    2.导入spring-boot-dependencies项目依赖
    <dependencyManagement>
    <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>1.5.6.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
    </dependencyManagement>
    

Spring Boot 需要独立的容器运行吗?

可以不需要,SpringBoot已经内置了 Tomcat/ Jetty 等容器。

运行 Spring Boot 有哪几种方式?

1.用命令直接运行或者放到容器中运行
2.用 Maven/ Gradle 插件运行
3.直接执行 main 方法运行

Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它读取配置文件,然后根据配置路径去扫描这个类,实现自动配置。

如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包,还可以省去各种版本冲突的麻烦。例如你想使用JPA技术访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。

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

如果我们想在Spring Boot启动的时候运行一些特定的代码,可以实现接口 ApplicationRunner或 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。
关于启动顺序,如果涉及到多处启动,我们可以通过实现org.springframework.core.Ordered接口或者使用 org.springframework.core.annotation.Order注解,来控制它们的启动顺序。

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

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

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

主要有两种方式:
1,Spring Loaded
2,Spring-boot-devtools
在Spring Boot实现代码热部署是一件很简单的事情,通过简单的依赖引入,即可实现在代码修改时自动部署并重新热启动项目。


程序员甲


潜影拾光

羊卓雍错

美丽羊湖,藏南明珠。

扫码转发

二维码
二维码
二维码
二维码
二维码
二维码

博文标签