1. Spring 框架概述

  • 定义:一个开源的 Java EE 轻量级框架,旨在简化企业级应用开发。
  • 核心特性
    • IOC (Inversion of Control):控制反转,将对象创建和依赖关系的管理交给 Spring 容器。
    • AOP (Aspect-Oriented Programming):面向切面编程,将横切关注点(如日志、事务、安全)与业务逻辑分离。
    • 声明式事务:通过配置而非代码硬编码来管理事务。
    • 集成能力:轻松集成 MyBatis, Hibernate, Quartz, Redis 等第三方框架。

2. 核心容器 (Core Container)

2.1 IOC (控制反转) 与 DI (依赖注入)

  • 概念
    • IOC:对象不再主动创建依赖对象,而是由外部容器注入。
    • DI:实现 IOC 的具体手段,包括 Setter 注入、构造器注入、字段注入(@Autowired)。
  • BeanFactory vs ApplicationContext
    • BeanFactory:基础容器,延迟加载,资源占用少。
    • ApplicationContext:企业级容器,启动时预加载单例 Bean,支持国际化、事件传播等高级功能。
  • Bean 的作用域 (Scope)
    • singleton (默认):单例,整个容器只有一个实例。
    • prototype:多例,每次请求创建一个新实例。
    • request / session / application:Web 环境下的作用域。

2.2 Bean 的生命周期

  1. 实例化 (Instantiation):Spring 容器创建 Bean 的实例。
  2. 属性赋值 (Populate):注入依赖属性。
  3. 初始化前处理 (BeanPostProcessor.before):执行前置处理器。
  4. 初始化 (Initialization)
    • 执行 @PostConstruct 注解方法。
    • 执行 InitializingBean.afterPropertiesSet() 方法。
    • 执行自定义 init-method
  5. 初始化后处理 (BeanPostProcessor.after):执行后置处理器(AOP 代理通常在此步骤生成)。
  6. 使用 (In Use):Bean 就绪,可供应用程序使用。
  7. 销毁 (Destruction)
    • 容器关闭时,执行 @PreDestroy
    • 执行 DisposableBean.destroy()
    • 执行自定义 destroy-method

3. AOP (面向切面编程)

  • 核心概念
    • 切面 (Aspect):横切关注点的模块化(如事务管理器)。
    • 连接点 (Joinpoint):程序执行过程中的任意点(通常是方法执行)。
    • 通知 (Advice):切面在特定连接点执行的动作。
      • @Before:前置通知。
      • @After:后置通知(无论是否异常)。
      • @AfterReturning:返回通知。
      • @AfterThrowing:异常通知。
      • @Around:环绕通知(最强大,可控制执行流程)。
    • 切入点 (Pointcut):匹配连接点的表达式(如 execution(* com.service.*.*(..)))。
    • 织入 (Weaving):将切面应用到目标对象的过程(Spring 默认使用动态代理)。
  • 实现原理
    • JDK 动态代理:针对实现了接口的类。
    • CGLIB 代理:针对未实现接口的类(生成子类)。

4. Spring MVC (Web 层框架)

  • 核心流程
    1. 用户发送请求至 DispatcherServlet (前端控制器)。
    2. DispatcherServlet 查询 HandlerMapping,找到对应的 Handler (Controller)。
    3. DispatcherServlet 调用 HandlerAdapter 执行 Handler。
    4. Handler 执行完毕返回 ModelAndView
    5. DispatcherServlet 将 ModelAndView 传给 ViewResolver 解析视图。
    6. DispatcherServlet 渲染视图并响应给用户。
  • 常用注解
    • @Controller / @RestController:标记控制器。
    • @RequestMapping / @GetMapping / @PostMapping:映射 URL。
    • @RequestParam:获取查询参数。
    • @PathVariable:获取路径变量。
    • @RequestBody:接收 JSON 数据并转换为对象。
    • @ResponseBody:返回 JSON 数据。

5. 事务管理 (Transaction Management)

  • 编程式事务:使用 TransactionTemplate 或 PlatformTransactionManager 手动控制(代码侵入性强,少用)。
  • 声明式事务 (推荐):
    • 基于注解@Transactional
      • 可配置属性:propagation (传播行为), isolation (隔离级别), rollbackFor (回滚规则), timeout (超时时间)。
    • 基于 XML:通过 <tx:advice> 和 <aop:config> 配置。
  • 事务传播行为 (Propagation)
    • REQUIRED (默认):如果当前有事务则加入,否则新建。
    • REQUIRES_NEW:挂起当前事务,新建一个事务。
    • NESTED:嵌套事务。
    • SUPPORTSNOT_SUPPORTEDMANDATORYNEVER 等。
  • 失效场景
    • 方法非 public
    • 同类方法内部调用(自调用),绕过了代理对象。
    • 异常被 try-catch 捕获且未抛出。
    • 数据库引擎不支持事务(如 MyISAM)。

6. Spring Boot (现代化开发基石)

  • 核心理念:约定优于配置 (Convention over Configuration)。
  • 主要特性
    • 自动配置 (Auto Configuration):根据 classpath 下的依赖自动配置 Bean(如引入 spring-boot-starter-web 自动配置 Tomcat 和 Spring MVC)。
    • 起步依赖 (Starters):简化 Maven/Gradle 依赖管理。
    • 内嵌容器:内置 Tomcat/Jetty/Undertow,无需部署 WAR 包,直接运行 JAR。
    • Actuator:提供监控和管理端点(健康检查、指标监控)。
    • 配置文件:支持 application.properties 和 application.yml,支持多环境配置 (profile)。

7. 常见设计模式在 Spring 中的应用

  • 工厂模式BeanFactoryApplicationContext 创建 Bean。
  • 单例模式:Spring 中的 Bean 默认为单例。
  • 代理模式:AOP 实现的核心。
  • 模板方法模式JdbcTemplateRestTemplate 等。
  • 观察者模式:Spring 的事件驱动模型 (ApplicationEventApplicationListener)。
  • 适配器模式:Spring MVC 中的 HandlerAdapter
  • 策略模式:不同的资源访问策略 (Resource 接口实现类)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐