《2021最新Java面试题全集-2021年第二版》不断更新完善!

    

第十四章 Spring Boot

1:什么是 Spring boot

Spring框架这个大家族中,产生了很多衍生框架,比如 SpringSpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在Spring配置文件中创建,依赖注入即为由Spring容器为应用程序的某个对象提供资源,比如 引用对象、常量数据等。

SpringBoot是一个框架,一种全新的编程规范,它的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。

 

2:为什么要用 Spring boot

Spring Boot使编码变简单

Spring Boot使配置变简单

Spring Boot使部署变简单

Spring Boot使监控变简单

SpringBoot的核心功能有:

1)独立运行 Spring 项目

2)内嵌 Servlet 容器,Spring Boot 可以选择内嵌 TomcatJetty,无须以 war 包形式部署项目。

3)提供 Starter 简化 Maven 配置,例如,当你使用了 spring-boot-starter-web ,会自动加入如下依赖:spring-boot-starter-web pom 文件

4)自动配置: Spring Bean Spring Boot 检测到特定类的存在,就会针对这个应用做一定的配置,进行自动配置 Bean ,这样会极大地减少我们要使用的配置。

5)准生产的应用监控: Spring Boot 提供基于 HTTPJMXSSH 对运行时的项目进行监控。

6)无代码生成和 XML 配置: Spring Boot 没有引入任何形式的代码生成,它是使用的@Condition 注解以实现根据条件进行配置。同时使用了 Maven /Gradle 的依赖传递解析机制来实现 Spring 应用里面的自动配置

 

3:Spring boot 核心配置文件是什么

Spring Boot提供了两种类型的配置文件:

·       properties文件

·       yml文件

常见的核心配置文件可能有:

application.properties

application.yml

bootstrap.yml

application-{profile}.properties

 

4:什么是 JavaConfig

Spring JavaConfig Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java 配置方法,它有助于避免使用 XML 配置。

使用 JavaConfig 的优点在于: 面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等,减少或消除 XML 配置。

基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML Java 之间来回切换。 JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。

从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将 JavaConfig XML 混合匹配是理想的。

类型安全和重构友好。 JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于Java对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

 

5:Spring Boot 常用的 Starter 有哪些?

比如:

spring-boot-starter-web :提供 Spring MVC + 内嵌的 Tomcat

spring-boot-starter-data-jpa :提供 Spring JPA + Hibernate

spring-boot-starter-data-Redis :提供 Redis

mybatis-spring-boot-starter :提供 MyBatis

 

6:Spring boot 有哪些方式可以实现热部署?

SpringBoot热部署实现有两种方式:

1)使用Spring loaded

2)使用Spring-boot-devtools

 

7:Spring boot自动配置的原理

    Spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration ,会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

1SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration

2@EnableAutoConfiguration 作用: 将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中; 每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;

3)每一个自动配置类进行自动配置功能; 根据当前不同的条件判断,决定这个配置类是否生效

4)一但这个配置类生效,这个配置类就会给容器中添加各种组件。这些组件的属性是从对应的properties类中获取 的,这些类里面的每一个属性又是和配置文件绑定的

5)所有在配置文件中能配置的属性都是在xxxxProperties类中封装着,配置文件能配置什么,就可以参照某个功能对应的这个属性类

8:Spring Boot 的启动类注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解

1@Configuration 注解,实现配置文件的功能。

2@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

3@ComponentScanSpring组件扫描