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一起使用,用于扫描该注解标识的包及其子包中的组件。

相关推荐
AI人H哥会Java4 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
计算机学长felix7 分钟前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
sin22018 分钟前
springboot数据校验报错
spring boot·后端·python
开心工作室_kaic14 分钟前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
缺少动力的火车16 分钟前
Java前端基础—HTML
java·前端·html
loop lee24 分钟前
Redis - Token & JWT 概念解析及双token实现分布式session存储实战
java·redis
ThetaarSofVenice25 分钟前
能省一点是一点 - 享元模式(Flyweight Pattern)
java·设计模式·享元模式
InSighT__26 分钟前
设计模式与游戏完美开发(2)
java·游戏·设计模式
神仙别闹27 分钟前
基于Java2D和Java3D实现的(GUI)图形编辑系统
java·开发语言·3d
dbcat官方31 分钟前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构