SpringBoot面试题
- 1. SpringBoot优点
- 2. SpringBoot的核心注解是什么?由那些注解组成?
- 3. SpringBoot自动配置原理是什么?
- 4. 运行 SpringBoot 有哪几种方式?
- 5. SpringBoot 需要独立的容器运行吗?
- 6. 开启SpringBoot 特性有哪几种方式?
- 7. SpringBoot 打成的jar和普通的jar有什么区别 ?
- 8. Spring Boot的配置文件格式
- 9. 你如何理解SpringBoot配置加载顺序?
- 10. SpringBoot事务的使用
- 11. Async异步调用方法
- 12. 如何使用SpringBoot实现异常处理?
- 13. 如何禁用一个特定自动配置类
- 14. 如何使用SpringBoot实现分页和排序?
- 15. SpringBoot、Spring MVC和Spring有什么区别?
- 16. 如何理解Spring Boot中的Starters?
- 17. 什么是JavaConfig?
1. SpringBoot优点
独立运行。
内嵌了servlet,tomat等,不需要打成war包部署到容器中,只需要将SpringBoot项目打成jar包就能独立运行。
简化配置
spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。各种常用组件及配置已经默认配置完成,无需过多干预。
避免大量的Maven导入和各种版本冲突
2. SpringBoot的核心注解是什么?由那些注解组成?
核心注解为:@SpringBootApplication
该注解主要由三个注解组成:
@SpringBootConfiguration()
:代表当前是一个配置类@EnableAutoConfiguration()
: 打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
。@ComponentScan()
:指定扫描哪些Spring注解
3. SpringBoot自动配置原理是什么?
- SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
- 查看@EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
- 查看AutoConfigurationImportSelector,其中
selectImports(AnnotationMetadata annotationMetadata)
方法内 最终调用getCandidateConfigurations()
方法 - 查看
getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)
,获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories" - 然后把扫描到的这些文件包装成Properties对象。
- 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。
简而言之,整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中。
4. 运行 SpringBoot 有哪几种方式?
- 直接执行 main 方法运行
- 打成jar包,通过java -jar命令直接运行
- 用 Maven/ Gradle 插件运行
5. SpringBoot 需要独立的容器运行吗?
不需要,SpringBoot内置tomcat/jetty等容器
6. 开启SpringBoot 特性有哪几种方式?
1 继承spring-boot-starter-parent项目
2 导入spring-boot-dependencies项目依赖
7. SpringBoot 打成的jar和普通的jar有什么区别 ?
SpringBoot打成jar包可以直接通过java -jar *.jar启动项目,但是不能够像普通jar包一样被其他项目引用。
普通jar解压后就是包名,可以直接引用内部的类,而SpringBoot解压后BOOT/classes目录下才是真正的代码,因此不能被直接引用。
如果需要被引用可以配置pom,将SpringBoot打包成两个jar包,一个可执行,一个可引用。
8. Spring Boot的配置文件格式
YAML / properties
yml文件格式写法更加精简,减少配置文件的冗余性。
8.1 读取配置文件
@Value,@ConfigurationProperties
9. 你如何理解SpringBoot配置加载顺序?
9.1 核心配置文件
Spring Boot的核心配置文件是application和bootstrap配置文件。
9.2 加载顺序
bootstrap.yml先加载,application.yml后加载
9.3 区别
bootstrap.yml ,application.yml都可以配置参数;
bootstrap主要是系统级别的配置,这些参数一般不会轻易变动,application一般是应用级别的配置
10. SpringBoot事务的使用
SpringBoot的事物很简单,首先使用注解EnableTransactionManagement开启事物之后,然后在Service方法上添加注解Transactional便可。
11. Async异步调用方法
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用@Async注解即可实现方法的异步调用。 注意:需要在启动类加入@EnableAsync使异步调用@Async注解生效。
12. 如何使用SpringBoot实现异常处理?
Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个ControlerAdvice 类,来处理控制器类抛出的所有异常。
13. 如何禁用一个特定自动配置类
@SpringBootApplication(exclude= {Order.class})
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@EnableAutoConfiguration(excludeName={Foo.class})
14. 如何使用SpringBoot实现分页和排序?
使用Spring Boot实现分页非常简单。使用Spring Data-JPA可以实现将可分页的传递给存储库方法。
15. SpringBoot、Spring MVC和Spring有什么区别?
Spring:主要用来创建IOC容器,依赖注入,实现程序间的松耦合
SpringMVC: 主要是用来做WEB开发,通过各种组件的协调配合,简化Web应用的开发
SpringBoot: SpringBoot更像是一个管家,当使用到对应功能时,只需要导入指定应用启动器,SpringBoot就能够在底层默认其配置,大大简化了开发所需的繁杂配置
16. 如何理解Spring Boot中的Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa 启动器依赖就能使用了
17. 什么是JavaConfig?
@Configuration —>也会被spring容器托管,注册到容器中
@Bean---->相当于注册一个bean标签
来源:https://www.cnblogs.com/sun-10387834/p/15665760.html
https://zhuanlan.zhihu.com/p/82805889
https://blog.csdn.net/m0_58479954/article/details/124852158