type
status
date
slug
summary
tags
category
icon
password
SpringBoot面试题
SpringBoot约定优于配置如何理解
这是一种软件设计范式,主要是为了减少开发者对于配置项的维护,更多的集中于业务逻辑上
基于传统的Spring框架开发web应用,我们需要做很多和业务开发无关并且只需要做一次的配置。
- 管理jar依赖
Spring Boot提供了一系列的Starter依赖,大大简化了项目依赖管理。例如,使用spring-boot-starter-web就可以快速搭建一个Web应用,无需手动添加多个相关依赖。
- web.xml的维护
Spring Boot通过自动配置消除了对web.xml的需求。它使用Java配置和条件注解来自动配置Servlet容器,简化了Web应用的设置过程。
- 应用部署到Web容器
Spring Boot默认集成了Tomcat作为内嵌的Web服务器。这意味着你可以直接运行一个可执行的JAR文件来启动应用,无需单独部署到外部的Web容器中。
- Dispatch-Servlet.xml的配置项维护
Spring Boot自动配置了DispatcherServlet,无需手动维护dispatch-servlet.xml文件。它会根据classpath中的依赖自动配置Spring MVC的各个组件。
- 第三方组件集成到Spring IOC容器中的配置项维护
Spring Boot的自动配置机制能够自动检测classpath中的第三方库,并自动将其集成到Spring的IOC容器中。这大大减少了手动配置的工作量,例如自动配置数据源、JPA实体管理器等。
Spring Boot 中自动装配机制的原理
自动将第三方组件的Bean加载到Spring IOC容器中,在SpringBoot中只需要在启动类上加上@SpringBootApplication注解即可实现,@SpringBootApplication 是一个复合注解,真正实现自动装配的注解是 @EnableAutoConfiguration。
- 引入Starter启动依赖组件时,这个组件必须包含@Configuration配置类,在这个配置类里通过@Bean注解声明需要装配到IOC容器的Bean对象
- 在Spring-Boot-autoConfigure jar包中的META-INF/Spring.factories,列出了所有需要自动装配的类,当应用启动时,Spring Boot会读取这个文件,并加载相应的自动配置类
- 自动配置类通常使用@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,根据classpath中是否存在特定的类或Bean来决定是否应用某个配置
- Spring Boot还提供了@ConfigurationProperties注解,允许将配置文件中的属性绑定到Java对象上,简化了配置的管理和使用
SpringBoot的优点
- 快速开发
SpringBoot通过自动配置和约定优于配置的原则,大大减少了开发时间。开发者可以专注于业务逻辑,而不是繁琐的配置工作。例如,使用@SpringBootApplication注解就可以自动配置Spring应用上下文,简化了传统Spring应用的复杂配置过程。
- 独立运行
SpringBoot应用可以作为独立的JAR文件运行,因为它内嵌了Servlet容器(如Tomcat、Jetty)。这意味着不需要部署WAR文件到外部的web服务器,大大简化了部署过程,特别适合微服务架构和容器化部署。
- 简化配置
SpringBoot推崇使用Java配置和注解,减少了XML配置的需求。例如,@EnableAutoConfiguration注解可以根据类路径中的jar依赖自动配置Spring应用。此外,application.properties或application.yml文件提供了一种集中管理配置的方式,使得配置更加清晰和易于维护。
- 自动管理依赖
SpringBoot提供了一系列的"starter"依赖,这些starter pom简化了Maven配置。例如,spring-boot-starter-web包含了构建RESTful应用所需的所有依赖,包括Spring MVC、Jackson、Tomcat等。这不仅简化了依赖管理,还确保了依赖版本的兼容性。
- 集成测试支持
SpringBoot提供了一系列工具和注解来简化单元和集成测试。@SpringBootTest注解可以自动配置Spring应用上下文,使得集成测试变得更加容易。此外,MockMvc等工具可以模拟HTTP请求和响应,便于进行控制器层的测试。
- 监控管理
SpringBoot Actuator提供了生产级别的特性,如健康检查、审计、指标收集和HTTP追踪等。这些特性可以帮助你监控和管理你的应用。例如,/health端点可以提供应用的健康信息,/metrics端点可以提供各种指标数据。
- 与云平台天然集成
SpringBoot的设计理念与云原生应用的要求非常契合。它可以轻松部署到各种云平台,如AWS、Google Cloud或Azure。此外,SpringBoot还与Spring Cloud紧密集成,提供了一套完整的微服务解决方案,包括服务发现、配置管理、断路器等功能。
如何在SpringBoot启动时运行一些特定的代码
通过实现CommandLineRunner接口
通过实现applicationRunner接口
SpringBoot读取配置文件
- 通过@Value(${property}),读取application.yml
- @ConfigurationProperties(prefix=””),需搭配@Component对Bean字段进行绑定,如果没有@Component需配合@EnableConfigurationProperties(配置类.class)手动启用配置类
- @PropertySource(”classpath:配置文件名”)
- 作者:JackJame
- 链接:https://notion.qjit1314.eu.org/article/example-5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


