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

【P0】Spring 面试篇

Spring 概述?

什么是 Spring?

Java 应用开发的基础性支持平台,解决依赖管理、资源配置等基础问题,让开发者专注业务逻辑。

  • 基础定位:轻量级、一站式的 Java 企业级框架。
  • 根本使命:解决系统层间耦合度高、配置复杂的问题,简化 Java 开发流程。
  • 核心能力:通过 DI(依赖注入)实现依赖解耦,通过 AOP(面向切面编程)抽取跨模块共性功能。
  • 落地政策:依托 POJO 开发、面向接口编程、声明式开发、模板类等方式,从根源降低开发复杂性,成为 Java 企业级开发的 “事实标准” 框架。

Spring核心概念

IOC(控制反转/依赖注入):

  • 核心思想
    • 不直接创建对象,声明依赖由容器组装,将对象控制权从代码转移到容器,实现组件解耦与灵活组装。
    • 本质:运行时由装配器绑定对象耦合,打破编译期固定关联
    • 场景:业务流程由装配器实例化的对象关系图决定
  • 与传统编程差异
    • 传统:对象关联预先设定,编译期固定
    • IOC:关联关系抽象化,通过依赖注入绑定
  • 关键逻辑
    1. 开发者仅在代码中声明所需对象(如服务、组件),不通过<font style="color:#000000;">new</font>创建,不硬编码依赖关系;
    2. 对象创建、属性设置及依赖建立,由 IOC 容器负责;
    3. 依赖关系通过配置文件或注解(如<font style="color:#000000;">@Autowired</font>)描述,容器依此自动组合组件与服务;
    4. 使用对象时直接从容器获取,无需关注其创建与组装过程。
  • Java注入方式
    • 构造器注入:通过构造方法传入依赖
    • Setter 注入:通过 setXxx () 方法设置依赖
    • 接口注入:实现特定接口方法注入依赖

AOP(面向切面编程):

  • 核心思想
    • 将跨类共性行为封装为可重用模块,实现“业务逻辑与通用功能解耦”减少代码冗余,提升可维护性。
  • 关键逻辑
    1. 抽离影响多类的通用功能(如日志、权限校验),封装为独立 “切面” 模块;
    2. 无需在各类 / 方法中重复编写通用代码,通过声明式方式指定切面应用位置;
    3. 调用业务方法时,AOP 框架自动将切面逻辑织入执行流程(如方法执行前输出日志)。

Spring框架设计目标,设计理念,核心是什么?

  • 设计目标:提供一站式轻量级应用开发平台。
  • 设计理念
    • 面向 POJO/JavaBean:支持基于简单 Java 对象的开发,避免侵入业务代码。
    • 面向接口与 OOP:强制面向接口编程,遵循面向对象设计原则。
    • 依赖反转解耦:通过 IOC 管理对象间耦合关系。
  • 框架核心:IOC容器和AOP模块。
    • IOC 容器:管理 POJO 对象及对象间耦合关系。
    • AOP 模块:以动态非侵入方式增强服务。

Spring的优缺点是什么?

优点:(提升开发效率与系统灵活性

  • 依赖注入(DI):清晰化依赖关系,降低耦合,便于维护
  • 轻量 IOC 容器:资源占用低,比 EJB 更高效,适合资源有限场景
  • 解耦便捷,简化开发:IOC 接管对象生命周期及关系维护,减轻对象管理负担
  • 兼容整合性:灵活利用成熟技术,减少重复开发,提升效率
  • 模块化设计:按需选用,减少应用体积,简化配置
  • 原生支持 AOP 编程:内置面向切面编程能力,便于实现通用功能
  • 声明式事务管理:无需手动编写事务控制代码,简化事务处理
  • 降低 JavaEE API 使用难度:对复杂 API 进行封装,简化开发
  • 易集成优秀框架:兼容并蓄,不排斥第三方开源框架

缺点:(感知复杂度与性能、门槛问题

  • 轻量与大而全的感知矛盾:框架功能丰富,可能给人 “不轻量” 的印象
  • 依赖反射机制:反射操作对性能有一定影响
  • 使用门槛较高:入门学习需要较长时间掌握其核心概念与用法

Spring有哪些应用场景?

应用场景:聚焦 JavaEE 企业级应用开发,是构建 SSH、SSM 等主流技术架构的基础框架。

核心价值

  1. 非侵入式设计:以最小化应用代码对框架的依赖为核心目标。
  2. 一致的 POJO 编程模型:支持直接基于简单 Java 对象(POJO)开发应用。
  3. 推动优良设计风格:引导采用 “面向对象” 与 “面向接口” 的开发方式,强化代码模块化与抽象性。

详细讲解一下核心容器(SpringContext应用上下文) 模块?

Spring 的基础模块是整个框架的基石,其核心是BeanFactory,它为 Spring 提供了容器能力。

  • 定位:整个 Spring 框架的基石,所有 Spring 应用的核心支撑模块。
  • 核心:以BeanFactory为核心,通过其实现 “工厂模式”,是 Spring 作为 “容器” 的根本,负责管理对象的创建与依赖关系。

BeanFactory核心作用:

  1. 实现控制反转(IOC),将对象控制权从代码转移到容器。
  2. 支持通过<font style="color:#000000;">XmlBeanFactory</font>从 XML 配置文件中读取元数据(如 Bean 的定义、属性、依赖关系)。
  3. 依据 XML 配置自动创建并组装完整的系统 / 应用对象,无需手动处理对象创建与依赖注入。

Spring有哪些事件?

Spring 提供 5 种核心容器事件,对应容器不同生命周期阶段,具体如下:

  1. ContextRefreshedEvent(上下文更新事件)
    • 触发时机:ApplicationContext 初始化 / 更新完成、调用 <font style="color:#000000;">ConfigurableApplicationContext#refresh()</font>
    • 含义:容器已完成 Bean 初始化与依赖注入,进入可用状态
  2. ContextStartedEvent(上下文开始事件)
    • 触发时机:调用 <font style="color:#000000;">ConfigurableApplicationContext#start()</font>,容器启动 / 重启时
    • 含义:容器从停止→运行状态,可触发 Bean 启动相关回调
  3. ContextStoppedEvent(上下文停止事件)
    • 触发时机:调用 <font style="color:#000000;">ConfigurableApplicationContext#stop()</font>,容器停止时
    • 含义:容器从运行→停止状态,Bean 暂不提供服务但未销毁
  4. ContextClosedEvent(上下文关闭事件)
    • 触发时机:ApplicationContext 关闭(如 Web 应用关闭、调用 <font style="color:#000000;">close()</font>)时
    • 关键行为:销毁所有单例 Bean,释放容器资源
  5. RequestHandledEvent(请求处理事件)
    • 适用场景:仅 Web 应用
    • 触发时机:HTTP 请求处理完成时
    • 用途:记录请求日志、统计处理耗时等

Spring 框架中用到了哪些设计模式?

  1. 代理模式
    1. 应用场景:在 AOP(面向切面编程)和远程调用(remoting)中大量使用。
    2. 实现方式:作为 AOP 思想的底层技术,Spring 采用 JDK Proxy 和 CgLib 类库实现代理。
  2. 单例模式
    1. 体现:Spring 配置文件中定义的 bean 默认采用单例模式,由容器维护唯一实例。
  3. 模板模式
    1. 作用:解决代码重复问题,封装固定流程,暴露可变部分供扩展。
    2. 典型示例:<font style="color:#000000;">RestTemplate</font><font style="color:#000000;">JmsTemplate</font><font style="color:#000000;">JpaTemplate</font>等模板类。
  4. 委派模式
    1. 应用:Spring 通过<font style="color:#000000;">DispatcherServlet</font>实现请求分发,将请求委派给相应的处理器处理。
  5. 工厂模式
    1. 核心体现:<font style="color:#000000;">BeanFactory</font>作为创建对象实例的工厂,是<font style="color:#000000;">BeanFactory</font>/<font style="color:#000000;">ApplicationContext</font>接口的核心理念,负责 Bean 的实例化与管理。

Spring 框架中如何有效的使用 JDBC ?

  • 核心优势:使用 Spring JDBC 可大幅减轻资源管理(如连接创建 / 关闭)与错误处理的开发代价,开发者仅需关注通过 <font style="color:#000000;">statements</font><font style="color:#000000;">queries</font> 语句实现数据库数据的存取。
  • 关键实现:Spring 框架通过 JdbcTemplate 模板类 优化 JDBC 使用效率,是 Spring JDBC 功能落地的核心组件。

SpringIOC 容器

什么是SpringIOC?

核心定义

  • 将对象调用权从程序代码转移到外部容器,实现“控制权反转”,由容器而非代码直接操控对象组件

核心职责

  • 全权管理对象全生命周期,涵盖对象创建、依赖注入DI、对象装配、对象配置,无需开发者手动操作

基础包

  • 由 org.springframework.beans 和 org.springframework.context 包协同构成,支撑容器配置与功能实现。

BeanFactory 接口

  • IOC容器基础接口,提供先进配置机制,支持任意类型对象配置管理,对象创建和依赖注入的底层核心

ApplicationContext 接口:BeanFactory 的子接口,继承基础能力并扩展:

  • 易与 Spring AOP 集成,简化切面编程配置
  • 提供 message resource 处理,支持国际化
  • 支持事件传播,实现容器内对象通信
  • 提供应用层专项配置(如 WebApplicationContext 适配 Web 场景)

控制反转(IOC)有什么作用?

Spring IOC 的核心价值在于接管对象的创建与依赖管理,解决复杂依赖的维护难题

  • 全托管对象生命周期。
  • 解耦依赖关系。
  • 支持对象创建过程的增强。

SpringIOC的优点?

  • 降低代码量:IOC/依赖注入机制,不需要手动创建对象
  • 简化测试:无需依赖单例模式获取对象
  • 低代价实现松耦合:以最小的代码侵入性(如仅通过注解声明依赖),将对象间的依赖关系交由容器管理,避免硬编码耦合,实现组件间的松散关联,降低修改与维护成本
  • 灵活的初始化策略:IOC支持饿汉式、懒汉式两种初始化策略

SpringIOC的实现机制?

SpriIOC底层核心依赖:工厂模式+反射机制

  • 工厂模式:提供统一管理对象创建的架构
  • 反射机制:实现了根据配置动态生成对象的灵活性
interface Fruit {public abstract void eat();
}
class Apple implements Fruit {public void eat(){System.out.println("Apple");}
}
class Orange implements Fruit {public void eat(){System.out.println("Orange");}
}
class Factory {public static Fruit getInstance(String ClassName) {Fruit f=null;try {f=
http://www.dtcms.com/a/435325.html

相关文章:

  • pyqt 播放视频遮罩显示 时钟
  • Day01_刷题niuke20251002
  • 做宠物商品的网站公司网页首页图片
  • 衡水建设网站长沙房地产网站建设
  • linux进程与服务
  • wordpress订阅会员seo建站技术
  • 医疗AI平台化转型:从单点试点到体系化建设的互操作性与质量控制路径研究(下)
  • JavaScript 数组清空的三种方式
  • 网站云空间和普通空间上海传媒公司官网
  • 网站标题正确书写标准微信公众号登录不上
  • 复制标签页导致的Vue动态路由失效问题解决思路
  • 从零起步学习Redis || 第六章:Redis单线程模式的实现详解
  • 影视公司网站设计河南省建设厅厅长
  • PySide6 新(建)窗口 简单示例
  • 逍遥WEBP图片转换组件XiaoyaoWebp.dll
  • 网站建设公司+长春建设部质监局网站
  • Oracle的connect by level在MySQL中的华丽变身
  • wordpress 便签四川旅游seo整站优化站优化
  • K8s基础原理
  • 学习Java第二十八天——黑马点评26~32
  • QML学习笔记(二十三)QML的MouseArea的drag
  • 数据驱动下的GBDT实战指南:从原理拆解到业务落地的方法论
  • 欧拉-马歇罗尼常数
  • 一款基于STM32F103和树莓派的无人车
  • ORB_SLAM2原理及代码解析:MapPoint::UpdateNormalAndDepth() 函数
  • 4-2. 二叉搜索树 (BST)
  • 做英文网站的标准字体鱼巴士设计师服务平台
  • 做网站流量是什么珠海网站建设优化
  • NTLite(操作系统定制工具)
  • 模块即服务?厘清 Linux 系统服务与微服务架构的本质区别