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

Java面试第八山!《Spring框架》

一、Spring框架概述

Spring是Java企业级应用开发的核心框架,通过控制反转(IoC)和 面向切面编程(AOP)实现模块解耦,简化开发流程。其核心优势包括依赖注入、声明式事务管理、集成主流ORM框架(如Hibernate、MyBatis)等。

Spring生态全景图

  • 核心模块:IoC容器、AOP、事务管理

  • 扩展模块:Spring MVC(Web开发)、Spring Boot(快速开发)、Spring Cloud(微服务)

  • 数据层支持:Spring Data(统一数据访问)、Spring Security(安全认证)


二、Spring核心机制

1. 控制反转(IoC)与依赖注入(DI)

  • IoC:将对象创建与管理的控制权交给Spring容器,而非硬编码。

  • DI实现方式

    注入方式特点示例代码
    构造器注入强制依赖初始化new UserService(userRepository)
    Setter注入灵活设置可选依赖userService.setRepo(repo)
    注解注入简化配置(如@Autowired)@Autowired private UserRepo repo

IoC容器工作流程

  1. 加载配置文件(XML/注解)

  2. 解析Bean定义并注册到容器

  3. 实例化Bean并注入依赖

  4. 管理Bean生命周期(初始化/销毁)


2. 面向切面编程(AOP)

AOP核心概念

  • 切面(Aspect):封装横切关注点(如日志、事务)

  • 通知(Advice):定义何时执行增强(@Before,@Around)

  • 切点(Pointcut):指定哪些方法需要增强

AOP实现方式对比

方式原理适用场景
JDK动态代理基于接口代理目标类实现接口
CGLIB动态代理生成子类代理目标类无接口

示例:事务管理通过@Transactional注解实现方法级事务控制。


三、Bean管理与作用域

1. Bean生命周期

  1. 实例化:通过反射创建对象

  2. 属性注入:填充依赖(DI)

  3. 初始化:调用init-method或@PostConstruct

  4. 使用:通过容器获取Bean

  5. 销毁:调用destory-method

2. Bean作用域

作用域描述适用场景
Singleton单例(默认)无状态服务(如工具类)
Prototype每次请求创建新实例有状态对象(如购物车)
Request每个HTTP请求一个实例Web应用请求处理
Session每个用户会话一个实例用户登录信息管理

四、Spring注解深度解析

1. 组件扫描与核心注解

Spring通过@Component及其衍生注解实现Bean的自动注册,无需XML配置即可完成对象管理:

  • @Component:通用组件标记,适用于任意层级类

  • 分层专用注解

    • @Controller:Web层组件(如处理HTTP请求)

    • @Service:业务逻辑层组件

    • @Repository:数据访问层组件(自动处理数据访问异常)

示例配置

<context:component-scan base-package="com.example"/> <!-- 开启组件扫描 -->

2. 依赖注入注解

通过注解实现灵活依赖管理,无需set方法

  • @Autowired:按类型自动装配,配合@Qualifier("beanName")可按名称注入

  • @Resource:Java原生注解,直接按名称注入(等价于@Autowired + @Qualifier

  • @Value:注入配置文件属性(如@Value("${jdbc.url}")

代码示例

@Service
public class UserService {
    @Autowired
    @Qualifier("userDao")
    private UserDao dao; // 按类型+名称精确注入

    @Resource(name = "cacheManager")
    private CacheManager cache; // 直接按名称注入
}

3. 作用域与生命周期控制

  • @Scope:定义Bean作用范围(如@Scope("prototype")多例模式)

  • 生命周期回调

    • @PostConstruct:初始化后执行(替代init-method

    • @PreDestroy:销毁前执行

五、Spring事务管理

1. 事务传播行为

传播类型描述
REQUIRED当前有事务则加入,否则新建(默认)
REQUIRES_NEW新建事务,挂起当前事务
NESTED嵌套事务(子事务回滚不影响父事务)

2. 声明式事务配置

@Transactional(
  propagation = Propagation.REQUIRED, 
  isolation = Isolation.READ_COMMITTED, 
  rollbackFor = Exception.class
)
public void transferMoney() { ... }

六、Spring MVC与Spring Boot

1. Spring MVC工作流程

  1. 用户请求 → DispatcherServlet接收

  2. HandlerMapping确定目标Controller

  3. Controller执行业务逻辑 → 返回ModelAndView

  4. ViewResolver解析视图 → 渲染响应

2. Spring Boot核心优势

  • 自动配置:根据依赖自动配置组件(如spring-boot-starter-web集成Tomcat)

  • 简化部署:内嵌服务器,打包为可执行JAR

  • 监控支持:Actuator提供健康检查、性能指标


七、高频面试题精选

  1. IoC与DI的区别:IoC是设计思想,DI是实现方式。

  2. Bean线程安全吗:不安全的,单例Bean需避免成员变量,推荐使用ThreadLocal。

  3. Spring事务失效场景:非public方法、自调用、异常未抛出等。

翻过这座山,他们就会听到你的故事!欢迎在评论区交流~

相关文章:

  • 中学学习难点管理思维魔方
  • Qt的QTextBrowser`的样式设计
  • Spring Boot API 项目中 HAProxy 与 Nginx 的选择与实践
  • 《V8 引擎狂飙,Node.js 续写 JavaScript 传奇》
  • nodejs关于后端服务开发的探究
  • 豪越智慧消防安全:电气火灾监控系统守护用电安全
  • upload-labs详解(1-12)文件上传分析
  • 算法系列之数据结构-Huffman树
  • 【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程
  • AI绘画软件Stable Diffusion详解教程(7):图生图基础篇(改变图像风格)
  • 蓝桥杯题型
  • CAP三进二、Base原理和Raft算法
  • PDF 文件中的文本链接是如何定义的?
  • 简记_硬件系统设计之需求分析要点
  • 2025牛客寒假算法基础集训营6
  • Python自动化测试教程
  • Spring Boot 内置工具类,功能齐全!!
  • TTP/HTTPS、TCP/IP 协议、RPC、Socket 通信机制
  • 盛铂科技PDROUxxxx系列锁相介质振荡器(点频源):高精度信号源
  • GitLab常用操作
  • 导航网站网站提交怎么做/网络营销和传统营销的区别
  • 做期货与做网站的关系/武汉 网络 推广
  • 网站关键词分隔/汕头seo不错
  • 网站开发ppt模板/平台代运营是什么意思
  • 济南小型网站建设/写手代写平台
  • W做网站/百度指数人群画像怎么看