SpringBoot常规面试题

一、SpringBoot启动原理(了解即可)?

Spring Boot的启动原理主要依赖于@SpringBootApplication注解以及Spring Boot的自动配置机制,以下是详细的解释:

1、@SpringBootApplication注解

★ @SpringBootApplication是Spring Boot的核心注解,它实际上是三个注解的组合:@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。

@SpringBootConfiguration继承自@Configuration,表明该类是一个配置类,可以用来声明Bean

★ @EnableAutoConfiguration是开启自动配置的关键。Spring Boot会根据当前项目类路径下的jar包依赖情况,结合Spring.factories文件中的配置信息,进行自动配置,创建对应的Bean。

★ @ComponentScan默认会扫描当前包及其子包下所有标注了@Component、@Service、@Repository或@Controller等注解的类,并将它们作为Bean加入到IoC容器中。

2、Spring Boot启动过程

当我们运行带有@SpringBootApplication注解的主类时,实际上就是在运行一个Spring Boot应用。

Spring Boot会使用Spring框架的ApplicationContext加载器来创建并初始化ApplicationContext,这个过程中会执行一系列的Bean的创建初始化依赖注入等工作。

在初始化过程中,Spring Boot会读取META-INF/spring.factories文件,根据其中的EnableAutoConfiguration列表,启用对应的所有自动配置类,这些自动配置类会进一步注册各种所需的Bean到容器中。

同时,通过@ComponentScan注解完成对业务组件的扫描和加载,形成完整的Spring IoC容器。

3引导程序(SpringApplication.run()):

最终,调用SpringApplication的run方法启动Spring Boot应用。run方法内部完成了对环境变量的初始化、ApplicationContext的创建、监听器的注册等一系列操作,最后启动Spring Boot应用。

总结来说,Spring Boot通过@SpringBootApplication注解及其包含的元注解,配合Spring Boot的自动配置特性,实现了简洁高效的启动流程,使得开发者能够快速地构建出独立运行、准生产级别的基于Spring的应用程序。

二、Spring和SpringBoot的关系?

Spring和Spring Boot是Java开发框架中的两种重要技术,它们之间的关系可以这样理解:

1、Spring Framework(简称Spring):

Spring是一个开源轻量级Java开发框架,它通过提供IoC控制反转)、AOP面向切面编程)、DI依赖注入)等机制,极大地简化了企业级应用的开发。

Spring的主要目标是解决企业级应用开发的复杂性问题,提供了一套全面的编程和配置模型来支持几乎任何类型的Java应用。

2、Spring Boot:

Spring Boot基于Spring框架之上构建的一种快速应用开发框架,它对Spring平台及第三方库进行了一站式整合,并提供了默认配置简化项目搭建开发过程

Spring Boot核心理念是:“约定优于配置”,它自动配置了大量Spring组件无需手动编写大量的XML配置文件,开发者只需很少的配置就可以快速启动一个Spring应用。

Spring Boot内置TomcatJetty等Web容器,允许开发人员以jar形式直接运行应用,大大简化部署流程

总结来说,Spring Boot并不是替代Spring,而是Spring生态体系下的一个项目,旨在简化Spring应用的初始搭建以及开发过程,让开发者能更快地投入到业务逻辑开发中去。在Spring Boot中,你可以无侵入地使用所有Spring的功能和服务。

三、Spring Boot 的优点(面试时至少说三条) ?

Spring Boot具有以下主要优点:

1简化配置

Spring Boot通过提供默认配置,使得开发人员无需编写大量的XML配置文件。它遵循“约定优于配置”的原则,自动配置了Spring框架以及第三方库的依赖关系,开发者只需要添加少量的配置属性就能完成应用的搭建。

2快速启动

Spring Boot内嵌了Tomcat、Jetty等Web容器,允许开发者将应用打成一个可执行的jar包,直接通过java -jar命令就可以运行应用,大大简化了部署和启动流程。

3一站式解决方案

Spring Boot整合了许多常用的第三方库,如数据库连接池(HikariCP、Druid等)、模板引擎(Thymeleaf、FreeMarker等)、安全框架(Spring Security)、消息队列(RabbitMQ、Kafka等),开发者可以直接在项目中引用相关starter POM,而无需关注底层集成细节。

4健康检查与监控

Spring Boot Actuator模块提供了丰富的端点来监控应用的状态信息,包括但不限于健康检查、环境信息、审计、metrics统计等,方便运维管理和故障排查。

5零XML配置

Spring Boot鼓励使用Java注解进行配置,使得代码更清晰易读,同时也避免了XML配置容易出错的问题。

6、强大的CLI工具

Spring Boot CLI提供了命令行接口,可以快速地创建新项目或者测试Groovy脚本,极大地提高了开发效率。

7、易于测试

Spring Boot集成了Spring Test模块,为开发者提供了方便快捷的单元测试和集成测试支持。

8生产就绪

Spring Boot应用可以很轻松地被部署到各种环境中,无论是传统的服务器,还是云环境,甚至是Docker容器,都具备很好的兼容性和便捷性。

四、SpringBoot中的常用注解(面试时至少说说四个)?

    Spring Boot中包含了许多注解,用于简化配置和增强功能。以下是一些常用的注解:

  1. @SpringBootApplication

    • 这是一个组合注解,包含了@SpringBootConfiguration@EnableAutoConfiguration  @ComponentScan
    • 它标记在一个类上,表明该类是Spring Boot应用的主入口,负责启动并配置整个应用程序。
  2. @SpringBootConfiguration

    • 表示这是一个Spring配置类,等同于@Configuration注解。
  3. @EnableAutoConfiguration

    • 用于启用自动配置特性,根据项目依赖的jar包来自动配置Bean。
  4. @ComponentScan

    • 自动扫描指定包及其子包下的所有带有@Service, @Repository, @Component或@Controller注解的类,并将它们作为Bean加入到IoC容器中。
  5. @RestController

    • 标记在控制类上,表示这个类是RESTful Web服务的控制器,它会自动将方法返回的对象转换为JSON格式响应。
  6. @RequestMapping / @GetMapping / @PostMapping 

    • 用于处理HTTP请求映射,定义控制器的方法如何响应特定的URL请求。
  7. @Autowired

    • Spring框架的依赖注入注解,Spring容器会自动将匹配的Bean注入到被该注解标记的字段或构造函数中。
  8. @Value

    • 用于读取属性文件中的值,注入到字段或方法参数中。
  9. @ConfigurationProperties

    • 用于绑定外部配置(如application.properties或YAML文件)到Bean的属性上。
  10. @Bean

    • 在配置类中声明一个Bean对象的方法上使用,告诉Spring这个方法将会返回一个对象,该对象要注册到Spring IoC容器中。
  11. @ConditionalOn...

    • 这一系列注解基于条件进行Bean的加载,例如:@ConditionalOnClass@ConditionalOnMissingBean等。
  12. @Profile

    • 用于激活特定环境下的配置类或Bean,可以根据不同的环境切换不同的配置。

以上只列举了部分常见的Spring Boot注解,实际开发过程中还有很多其他注解根据具体场景使用

五、SpringBoot启动时做了哪些事情?

Spring Boot启动时主要做了以下事情:

  1. 初始化SpringApplication对象

    • 创建SpringApplication实例,这是Spring Boot应用的入口点。
  2. 加载和解析配置文件

    • 加载application.properties或application.yml等配置文件,将其中的属性转换为Java对象,并存入Spring Environment中。
  3. 创建并准备ApplicationContext

    • 根据@SpringBootApplication注解中的@EnableAutoConfiguration启用自动配置,根据类路径扫描、jar包依赖和默认配置信息来创建Bean定义。
    • 使用SpringApplication.run()方法创建并初始化一个合适的ApplicationContext(通常是AnnotationConfigServletWebServerApplicationContext)。
  4. 组件扫描

    • 根据@ComponentScan注解或者默认规则对指定包及其子包进行扫描,查找并注册带有@Component@Service@Repository@Controller等注解的类为Spring Bean。
  5. 自动配置

    • Spring Boot会分析当前环境中已有的类路径和Bean定义,基于约定优于配置的原则,自动配置所需的Bean。例如,如果发现HSQLDB在类路径中,则自动配置内嵌数据库;如果检测到Redis客户端库,则自动配置RedisTemplate等。
  6. 监听器事件发布

    • 在初始化过程中触发一些特定的Spring事件,如ApplicationEnvironmentPreparedEventApplicationContextInitializedEventApplicationPreparedEvent等,相关的监听器可以在此阶段执行特定操作。
  7. 启动嵌入式Web容器

    • 如果项目包含Web相关依赖,如Spring Web MVC,Spring Boot会自动配置并启动一个嵌入式的Servlet容器(如Tomcat、Jetty等),并且暴露服务端口。
  8. 执行CommandLineRunnerApplicationRunner接口实现类

    • 应用启动完成后,如果存在实现了CommandLineRunnerApplicationRunner接口的Bean,Spring Boot会调用它们的run方法,通常用于应用启动后的一些初始化操作。

通过这一系列过程,Spring Boot成功地简化了传统Spring应用的搭建和配置工作,使得开发者能够快速启动和运行一个Spring应用。

  • 38
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值