SpringBoot面试题

简介: SpringBoot面试题


  • springboot是什么?

Springboot概念:

SpringBoot 遵循约定大于配置的原则。定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器加载知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。

Springboot优势:

  1. 能够单独运行。无需打包放到tomcat容器中运行,自带tomcat的servlet容器,能够直接运行。
  2. 能够自动配置。通过各种starter组件,将配置项自动配置到容器中,只要依赖就能够使用,这也是“约定大于配置”的具体表现。
  3. 减少配置文件。不再需要xml等配置文件,可以通过注解来实现各种配置。
  4. 新增健康监控。通过actuator和endpoint来实现健康监控。
  • springboot启动过程?

Springboot的启动主要是靠(1)@SpringBootApplication注解、(2)SpringApplication实例化和(3)SpringApplication.run()方法起作用。

@SpringBootApplication注解由以下3个组成:

  1. @SpringBootConfiguration:标注当前类是配置类,将其注入到Spring容器中。
  2. @EnableAutoConfiguration:开启自动配置,将META-INF/spring.factories文件中的配置类加载进来。
  3. @ComponentScan:扫描当前目录和子目录中bean,将其加载进来。

实例化SpringApplication:

  1. 判断是否为web环境;
  2. 设置初始化器;
  3. 设置监听器;
  4. 推断应用的入口类,开始调用run()方法;

SpringApplication.run()方法的流程:

  1. 通过SpringFactorieLoader对象获得SpringApplicationListener,获取监听器。
  2. 初始化Environment对象。
  3. 创造ApplicationContext容器对象,并做初始化。
  4. 查找容器中的CommandLinesRunner和ApplicationRunner,进行初始化操作。
  5. 最后启动ApplicationContext,所有bean对象已经加载到该容器中;
  6. SpringBoot 源码解析 (二)----- Spring Boot精髓:启动流程源码分析:https://www.cnblogs.com/java-chen-hao/p/11829344.html
  7. SpringBoot启动流程是怎样的?:https://juejin.cn/post/6895341123816914958#heading-8
  • springboot自动配置原理?

sprinboot的自动配置主要依靠@EnableAutoConfiguration这个注解,使用这个注解就实现了ImportSelector接口,该接口的主要用途是加载各个starter中/MATE-INF/spring.factories中的配置类,将这些配置类加载到IoC容器中。值得注意的是所有以spring-boot-starter开头的依赖都放在springboot-autoconfig下,所以项目加入以上依赖,只要在properties文件中写好配置项,就会自动配置好,能够直接使用。

@SpringbootApplication由一下3个注解组成:

  1. @SpringBootConfiguration:运行将该注册类直接注入到IoC容器中;
  2. @ComponentScan:允许扫描配置路径的实体类,其中加上了@Controller、@Service、@Component等注解的将其加载到IoC容器中;
  3. @EnableAutoConfiguration:实现springboot自动装载的核心类;
  4. 淘宝一面:“说一下 Spring Boot 自动装配原理呗?”:

https://www.cnblogs.com/javaguide/p/springboot-auto-config.html

  1. 看完就会的SpringBoot自动装配原理:

滑动验证页面

  1. Spring Boot自动装配原理与启动过程详解:

https://juejin.cn/post/6940128900093575198#heading-11

  • springboot的starter的原理?

starter是实现springboot中自动配置的具体形式,在starter目录/MATE-INF/spring.factories配置好需要加载到IoC的配置类信息,springboot-autoconfig会自动来读取该配置项,依靠反射来实例化配置项。

  • springboot启动时候需要运行特定代码方法?

实现ApplicationRunner接口或者实现CommandLineRunner接口。


目录
打赏
0
1
1
0
223
分享
相关文章
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
Spring Boot最经典的20道面试题,你都会了吗?
Spring Boot最经典的20道面试题,你都会了吗?
630 0
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
674 37
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
799 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
85 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问