Spring Boot面试题
1、Spring Boot 中的监视器是什么?
Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。
2、SpringBoot 自动装配原理
SpringBoot的自动装配是SpringFramework的一个扩展,它可以根据应用程序的配置和classpath中的类来自动配置Spring应用程序上下文。SpringBoot的自动装配是通过条件化配置和Spring的组件扫描机制来实现的。
具体来说,SpringBoot的自动装配原理包括以下几个方面:
- 条件化配置
SpringBoot的自动装配是基于条件化配置的,即通过在类路径下的META-INF/spring.factories文件中定义条件化的自动配置类,根据条件来决定是否应用该自动配置类。例如,如果应用程序中配置了某个Bean,则不会应用自动配置类中的相应Bean。
- Spring组件扫描
SpringBoot的自动装配也依赖于Spring的组件扫描机制,即通过在应用程序中定义@ComponentScan注解来扫描应用程序中的组件,并将它们自动注入到Spring应用程序上下文中。通过自动扫描机制,SpringBoot可以自动装配许多常见的组件,例如控制器、服务、存储库等。
- 自动配置类
SpringBoot的自动装配还依赖于自动配置类,即在类路径下的META-INF/spring.factories文件中定义的条件化自动配置类。这些自动配置类可以自动配置Spring应用程序上下文中的各种组件,例如数据源、事务管理器、WebMvcConfigurer等。
- SpringBoot Starter
SpringBoot Starter是SpringBoot的一个重要特性,它可以将相关的依赖项打包成一个单独的模块,并提供默认的自动配置类和配置文件,从而简化应用程序的配置过程。例如,SpringBoot提供了spring-boot-starter-web模块,它包含了Web应用程序所需的依赖项和默认的自动配置类,可以快速地搭建一个Web应用程序。
总之,SpringBoot的自动装配是通过条件化配置和Spring的组件扫描机制来实现的,它可以大大简化应用程序的配置过程,并提高应用程序的开发效率。
@SpringBootConfiguration 是一个组合注解,由 @ComponentScan、@EnableAutoConfiguration 和 @SpringBootConfiguration 组成
- @SpringBootConfiguration 与普通 @Configuration 相比,唯一区别是前者要求整个 app 中只出现一次
- @ComponentScan
- excludeFilters - 用来在组件扫描时进行排除,也会排除自动配置类
- @EnableAutoConfiguration 也是一个组合注解,由下面注解组成
- @AutoConfigurationPackage – 用来记住扫描的起始包
- @Import(AutoConfigurationImportSelector.class) 用来加载
META-INF/spring.factories
中的自动配置类
为什么不使用 @Import 直接引入自动配置类
有两个原因:
- 让主配置类和自动配置类变成了强耦合,主配置类不应该知道有哪些从属配置
- 直接用
@Import(自动配置类.class)
,引入的配置解析优先级较高,自动配置类的解析应该在主配置没提供时作为默认配置
因此,采用了 @Import(AutoConfigurationImportSelector.class)
- 由
AutoConfigurationImportSelector.class
去读取META-INF/spring.factories
中的自动配置类,实现了弱耦合。 - 另外
AutoConfigurationImportSelector.class
实现了 DeferredImportSelector 接口,让自动配置的解析晚于主配置的解析
3、SpringBoot 拦截器、监听器、过滤器
SpringBoot中的拦截器、监听器和过滤器都是用于处理Web请求的中间件,它们可以对请求进行预处理、后处理、日志记录等操作,从而实现对Web应用程序的控制和管理。下面分别介绍它们的作用和区别:
- 拦截器(Interceptor)
拦截器是SpringMVC框架提供的一种机制,它可以在请求处理前、处理后和视图渲染前对请求进行拦截和处理。拦截器常用于对用户的请求进行身份验证、日志记录、权限控制等操作。在SpringBoot中,可以通过实现HandlerInterceptor接口来创建拦截器,在配置文件中配置拦截器的生效路径。
- 监听器(Listener)
监听器是用于监听应用程序中事件的一种机制,它可以在事件发生前、发生后或发生异常时进行处理。SpringBoot中的监听器可以监听Web应用程序的启动和关闭、Session的创建和销毁、上下文的初始化和销毁等事件。在SpringBoot中,可以通过实现ApplicationListener接口来创建监听器,在配置文件中配置监听器的生效方式。
- 过滤器(Filter)
过滤器是Web应用程序中最常用的一种中间件,它可以在请求被处理前和响应被发送前对请求和响应进行过滤和处理。过滤器常用于对请求进行编码、解码、验证、日志记录等操作。在SpringBoot中,可以通过实现Filter接口来创建过滤器,在配置文件中配置过滤器的生效路径和顺序。
总之,拦截器、监听器和过滤器都是用于处理Web请求的中间件,它们的作用和使用方式略有不同,但都可以实现对Web应用程序的控制和管理。在开发Web应用程序时,可以根据具体需求选择合适的中间件来处理请求。