当前位置: 首页 > article >正文

Spring 框架面试题集:常见问题解析

Spring 是一款流行的开源框架,广泛应用于企业级 Java 开发。作为一个多功能的框架,Spring 提供了 IoC(控制反转)、AOP(面向切面编程)以及与各种企业服务的集成。无论你是 Spring 的新手还是经验丰富的开发者,Spring 面试题通常会涉及到框架的基本原理、关键组件以及如何在实际开发中应用它。

1. Spring 是什么?它的核心特点有哪些?

答案: Spring 是一个开源的 Java 框架,旨在简化企业级应用程序的开发,提供了一个全面的基础架构支持,包括 IoC(控制反转)和 AOP(面向切面编程)。它的核心特点包括:

  • IoC(控制反转):通过依赖注入(DI)管理对象生命周期和依赖关系。
  • AOP(面向切面编程):支持将横切关注点(如日志、事务管理等)与业务逻辑解耦。
  • 容器:Spring 提供了一个强大的容器,用于管理 Bean 的生命周期。
  • 模块化:Spring 是一个模块化框架,可以根据需要选择不同的模块(如 Spring MVC、Spring Boot、Spring Data 等)。
  • 简化开发:通过注解、自动化配置和与各种数据库、消息队列、缓存系统等的集成,简化了应用程序的开发。

2. Spring 的 IoC 容器是什么?它如何工作?

答案: Spring 的 IoC 容器是 Spring 框架的核心,负责管理对象的创建、配置和生命周期。IoC 主要通过两种方式来实现:依赖注入(DI)控制反转(IoC)

  • 依赖注入(DI):在 Spring 中,组件之间的依赖关系是由容器在运行时注入的,而不是由类自己创建或查找依赖对象。
  • 控制反转(IoC):Spring 容器会将应用程序的控制反转,管理对象的实例化和依赖注入,解除开发者与类直接依赖的关系。

常见的容器包括:

  • BeanFactory:Spring 的最简单容器,提供了基础的依赖注入功能。
  • ApplicationContext:继承自 BeanFactory,提供了更多的企业级功能,例如事件传播、国际化支持等。

3. Spring 中的 Bean 生命周期是怎样的?

答案: Spring 管理的 Bean 会经历以下生命周期阶段:

  1. 实例化:Spring 创建 Bean 的实例。
  2. 属性注入:通过构造函数或 setter 方法注入依赖。
  3. 初始化:Spring 会调用实现了 InitializingBean 接口的 afterPropertiesSet() 方法,或者通过 @PostConstruct 注解指定的方法。
  4. 使用:Bean 准备好后,可以开始使用。
  5. 销毁:当 Bean 不再需要时,Spring 会销毁它。销毁前会调用 DisposableBean 接口的 destroy() 方法,或者通过 @PreDestroy 注解指定的方法。

4. Spring AOP 是什么?有什么应用场景?

答案: AOP(面向切面编程)是 Spring 提供的一种用于解耦横切关注点(如日志、事务管理、权限校验等)的技术。AOP 可以在不修改源代码的情况下,为目标对象添加额外的功能。

Spring AOP 的核心概念:

  • 切面(Aspect):定义了横切关注点和要执行的功能。
  • 连接点(Join Point):方法执行的位置,Spring AOP 可以在方法执行的前、后或者异常抛出时进行插入。
  • 通知(Advice):在连接点上执行的具体操作,分为前置通知、后置通知、异常通知等。
  • 切入点(Pointcut):定义了哪些方法会触发通知。
  • 织入(Weaving):将通知应用到目标对象的过程。

应用场景

  • 事务管理:Spring AOP 常用于事务管理,在方法执行前、后或抛出异常时自动管理事务。
  • 日志记录:自动记录方法的调用、参数、返回值等。
  • 性能监控:可以用 AOP 来监控方法的执行时间。

5. Spring 中的事务管理是如何实现的?

答案: Spring 提供了强大的事务管理支持,能够实现声明式事务和编程式事务。

  • 声明式事务管理:使用 AOP 来实现事务管理,最常见的方式是通过 @Transactional 注解。Spring 会自动为标记了该注解的方法创建一个事务,方法执行完毕后,Spring 会自动提交或回滚事务。

    示例:

     

    java

    复制编辑

    @Transactional public void transferMoney(Account from, Account to, double amount) { from.withdraw(amount); to.deposit(amount); }

  • 编程式事务管理:通过 PlatformTransactionManager 编程方式来管理事务,开发者需要手动控制事务的开始、提交和回滚。

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

答案: Spring Boot 是基于 Spring 框架的一个子项目,旨在简化 Spring 应用的开发过程,减少配置文件的编写量,提供自动配置、嵌入式服务器、快速开发等特性。

主要区别:

  • 自动配置:Spring Boot 提供了大量的自动配置,开发者无需手动配置大量的 Spring 配置文件。
  • 嵌入式服务器:Spring Boot 内置了 Tomcat、Jetty 或 Undertow 等 Web 服务器,无需部署外部服务器。
  • 简化项目结构:Spring Boot 提供了项目启动器(Starter)和自动配置,极大地减少了初始配置量。
  • 命令行工具:Spring Boot 提供了命令行工具,允许开发者以命令行方式运行应用。

7. Spring 的 BeanScope 有哪些类型?

答案: Spring 提供了多种 Bean 的作用域(Scope),决定了 Bean 的生命周期和创建方式:

  • Singleton(单例):默认作用域,每个 Spring 容器中只会有一个 Bean 实例。
  • Prototype(原型):每次从容器获取 Bean 时都会创建一个新的实例。
  • Request(请求):每次 HTTP 请求都会创建一个新的 Bean 实例,适用于 Web 应用。
  • Session(会话):每个 HTTP 会话中有一个 Bean 实例,适用于 Web 应用。
  • GlobalSession(全局会话):在全局 HTTP 会话中保持一个 Bean 实例,适用于 Portlet 环境。

8. Spring 中的 @Autowired 注解如何工作?

答案: @Autowired 注解用于自动注入依赖关系,Spring 会自动将匹配的 Bean 注入到标记了 @Autowired 的字段、构造函数或方法中。Spring 会根据类型进行注入,如果有多个匹配的 Bean,可以通过 @Qualifier 注解指定注入的 Bean。

9. 什么是 Spring Cloud?

答案: Spring Cloud 是一套用于构建分布式系统的工具集,它提供了服务注册与发现、负载均衡、断路器、配置管理、消息总线等功能。Spring Cloud 可以帮助开发者构建微服务架构,它与 Spring Boot 无缝集成,简化了分布式系统的开发。


http://www.kler.cn/a/582539.html

相关文章:

  • mysql安装与使用
  • 2024年广州市智能网联汽车创新实践年度报告
  • 文件上传漏洞 upload-labs靶场
  • upload-labs-靶场(1-19关)通关攻略
  • 一次解决Andriod Studio Build Gradle很慢或报错下载失败等问题
  • 蓝桥杯第二天:2023省赛C 1题 分糖果
  • 数字电子技术基础(二十七)——输入端电阻的负载特性
  • 微商模式的演进与开源链动2+1模式、AI智能名片及S2B2C商城小程序源码的应用探索
  • 游戏开发商 Nimblebites 携 Super-B 在 Sui 上推动游戏创新
  • 蓝桥杯备考:数据结构堆之序列合并
  • 【Pandas】pandas Series shift
  • 浅谈React的Diff算法,简单易懂!
  • 创建模式-工厂方法模式(Factory Method Pattern)
  • EasyRTC实现海思设备与Web浏览器小程序双向通话时,收到浏览器H5端发来的音频应该如何解码播放
  • 渗透测试工具之OpenVAS
  • 【SQL】查看触发器名称、所属的表(包括架构)、事件类型、触发器类型(AFTER/INSTEAD OF)、是否启用、创建日期
  • coze ai assistant Task 2
  • Tomato靶机攻略
  • 【深度学习】图像卷积
  • Jupyter Notebook 全平台安装与配置教程(附Python/Anaconda双方案)