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

发布于:2025-03-04 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、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方法、自调用、异常未抛出等。

  4. Spring Boot自动配置原理:通过@EnableAutoConfiguratuion扫描META-INF/spring.factories。

翻过这座山,他们就会听到你的故事!

下期预告《面试之Springboot框架》...