spring boot常见的面试题

1.Spring Boot和Spring的区别是什么?

  • 简化配置

    Spring框架需要大量的XML配置文件来配置应用程序,而Spring Boot采用约定大于(优于)配置的原则,减少了配置文件的数量,大部分情况下只需很少甚至不需要配置。

  • 快速开发

Spring Boot提供了很多开箱即用的功能和插件,可以快速构建应用程序,而传统的Spring框 架需要手动集成各种组件,开发过程相对繁琐。

举个简单的例子,假设你想要创建一个简单的 RESTful Web 服务,使用传统的 Spring框 架, 你需要手动配置 web.xml 文件、Servlet 容器等,然后编写控制器、服务类等。而在 Spring Boot 中,你只需一个带有 @RestController 注解的类,添加一些相关的依赖(比如 spring-boot-starter-web),Spring Boot 就会自动帮你启动嵌入式的 Tomcat 服务器,并自动 配置所需的组件,你可以立即开始编写 RESTful API,无需关注太多繁琐的配置和集成工作。

这种自动配置和开箱即用的特性大大加速了应用程序的开发过程,让开发人员能够更专注于 业务逻辑的实现,而不必花费大量时间在配置和集成上。这也是 Spring Boot 在快速开发方 面的一个显著优势。

  • 集成度高

    • Spring Boot集成了大量常用的第三方库和工具,如嵌入式服务器(如Tomcat、Jetty)、安全性、监控等,简化了开发人员的工作。
  • 独立运行

    • Spring Boot应用程序可以作为一个独立的JAR文件运行,内嵌了Servlet容器,无需部署WAR文件到外部服务器,便于部署和管理。
  • 自动配置

    • Spring Boot通过自动配置功能,根据项目中的依赖和环境,自动配置Spring应用程序,减少了手动配置的工作量。
  • 监控与管理

    • Spring Boot提供了Actuator模块,可以轻松地监控和管理Spring Boot应用程序,包括应用程序信息、健康状况、性能指标等。

总的来说,Spring Boot相对于传统的Spring框架,更加注重开发效率和便利性,提供了更简洁、更快速的开发方式,使得开发人员可以更专注于业务逻辑的实现,而不是配置和集成问题。这些特点使得Spring Boot成为当今Java开发中备受欢迎的框架之一。

2.Spring Boot中的自动装配原理是什么?

  1. @EnableAutoConfiguration注解:在Spring Boot应用程序的主配置类上通常会使用@SpringBootApplication注解,而这个注解本身就包含了@EnableAutoConfiguration注解。@EnableAutoConfiguration注解的作用是启用Spring Boot的自动配置机制,它会根据项目的依赖和需要自动配置应用程序的各种组件。

  2. spring.factories文件:Spring Boot项目中的META-INF/spring.factories文件定义了各种自动配置类。这些自动配置类通过条件判断来确定是否要应用某种配置。条件判断是通过@ConditionalOnClass@ConditionalOnBean@ConditionalOnProperty等条件注解来实现的,只有当条件满足时,对应的自动配置类才会生效。

通过@EnableAutoConfiguration注解和spring.factories文件的配合,Spring Boot能够在启动时根据项目的依赖和环境自动配置所需的组件,大大简化了开发者的工作量。这种自动装配的机制使得开发者可以更专注于业务逻辑的开发,而不用过多关注底层框架的配置。

总的来说,Spring Boot中的自动装配原理是基于@EnableAutoConfiguration注解和spring.factories文件的机制,通过条件判断和自动配置类来智能地确定并配置应用程序所需的组件。

3.springboot的启动流程

Spring Boot的启动流程可以分为以下几个关键步骤:

  1. 加载Spring Boot应用程序:当启动一个Spring Boot应用程序时,首先会加载应用程序的主配置类(通常带有@SpringBootApplication注解),这个主配置类会通过@EnableAutoConfiguration注解启用自动配置,并扫描应用程序中的其他组件。

  2. 执行自动配置:在加载主配置类时,Spring Boot会根据项目的依赖和环境执行自动配置。这包括了加载spring.factories文件中定义的自动配置类,并根据条件判断确定是否需要应用这些自动配置。

  3. 启动内嵌的Servlet容器:如果应用程序是一个Web应用程序,Spring Boot会自动启动一个内嵌的Servlet容器(如Tomcat、Jetty等),并将DispatcherServlet注册到容器中,以处理HTTP请求。

  4. 扫描和加载Bean:Spring Boot会扫描应用程序中所有的组件(带有@Component@Service@Repository等注解的类),并创建这些Bean。同时,Spring Boot还会加载其他特殊类型的Bean,比如配置类、监听器、过滤器等。

  5. 运行应用程序:一旦所有Bean都被加载并配置完成,Spring Boot就会运行应用程序。这包括处理HTTP请求、执行业务逻辑、响应客户端请求等操作。

  6. 关闭应用程序:当应用程序需要关闭时,Spring Boot会执行一些清理工作,比如关闭内嵌的Servlet容器、释放资源等。通常可以通过ApplicationContextclose()方法来关闭Spring应用程序上下文。

总的来说,Spring Boot的启动流程包括加载应用程序、执行自动配置、启动内嵌Servlet容器、扫描和加载Bean、运行应用程序以及关闭应用程序等步骤。通过自动配置和内嵌Servlet容器等功能,Spring Boot大大简化了Spring应用程序的开发和部署过程。

4.springboot的核心注解是什么?常用的注解有哪些?

Spring Boot的核心注解是@SpringBootApplication。这个注解整合了多个注解,包括@Configuration@EnableAutoConfiguration@ComponentScan

  1. @Configuration:标识该类为配置类,相当于Spring配置文件中的<beans>。通常用来定义Bean,可以与@Bean注解配合使用。

  2. @EnableAutoConfiguration:开启自动配置功能,Spring Boot会根据项目的依赖和环境自动配置应用程序所需的Bean。

  3. @ComponentScan:启用组件扫描,自动扫描指定包及其子包下的组件,如@Service、@Controller等,并将其注册为Spring容器中的Bean。

@SpringBootApplication注解的作用是简化Spring应用程序的配置和启动过程。通过整合了@Configuration@EnableAutoConfiguration@ComponentScan三个注解,它使得开发者无需手动编写繁琐的配置,而是通过约定大于配置的方式快速搭建Spring Boot应用。这样可以极大地提高开发效率,并且使得应用程序的配置更加清晰和易于维护。

除了核心注解外,Spring Boot还有许多常用的注解,其中一些包括:

  1. @RestController:标识一个类为RESTful风格的控制器,它的方法返回的数据直接写入HTTP响应体中。

  2. @RequestMapping:用于映射Web请求到特定的处理方法上,可以用在类上和方法上,用于指定URL路径。

  3. @Autowired:用于自动装配Bean,可以用在字段、构造方法和方法上。

  4. @Service:用于标识一个类为服务层组件。

  5. @Repository:用于标识一个类为数据访问层组件。

  6. @Configuration:用于定义配置类,可替代传统的XML配置文件。

  7. @ConditionalOnProperty:条件注解,根据指定的属性值来决定是否创建Bean或是应用配置。

  8. @Value:用于将配置文件中的属性值注入到Bean中。

  9. @ComponentScan:用于扫描组件,通常与@SpringBootApplication一起使用,用于扫描该注解标识的包及其子包中的组件。

相关推荐
BillKu35 分钟前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis
全栈凯哥35 分钟前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表
chxii36 分钟前
12.7Swing控件6 JList
java
全栈凯哥38 分钟前
Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解
java·算法·leetcode·链表
YuTaoShao38 分钟前
Java八股文——集合「List篇」
java·开发语言·list
PypYCCcccCc44 分钟前
支付系统架构图
java·网络·金融·系统架构
华科云商xiao徐1 小时前
Java HttpClient实现简单网络爬虫
java·爬虫
扎瓦1 小时前
ThreadLocal 线程变量
java·后端
BillKu2 小时前
Java后端检查空条件查询
java·开发语言
jackson凌2 小时前
【Java学习笔记】String类(重点)
java·笔记·学习