4

JAVA面试题锦集-Spring(SpringBoot)

 2 years ago
source link: http://www.veiking.cn/blog/1077-page.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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实现代码热部署是一件很简单的事情,通过简单的依赖引入,即可实现在代码修改时自动部署并重新热启动项目。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK