Spring概述

4 阅读3分钟

一、Spring 是什么

Spring 是轻量级、一站式 Java 企业级开发框架,核心目标:简化 Java 开发,降低软件开发的复杂性,为企业提供全面的编程和配置模型。

技术定位:一站式,技术生态圈。

  • 创始人:Rod Johnson

  • 核心两大思想:IOC(控制反转)、AOP(面向切面编程)

  • 生态全家桶:Spring Core、Spring MVC、Spring Boot、Spring Cloud、Spring Data、Spring Security 等

    • Spring Framework: 基础框架,提供核心容器等基础设施
    • Spring Boot: 当前最流行的企业级开发方案(90%企业使用)
    • Spring Cloud: 分布式系统开发解决方案
  • 技术演进:

    • 1.0时代:仅支持XML配置
    • 2.0时代:引入注解开发
    • 3.0时代:支持纯注解开发
    • 5.0时代:全面支持JDK8
    • 6.0时代:最新版本(2022年发布)

二、Spring架构

1. Spring Framework系统架构
  • 核心容器(Core Container):

    • 功能: 管理应用对象(Bean)的创建与依赖关系
    • 组件: Beans, Core, Context, SpEL
  • AOP模块:

    • 原理: 基于代理机制实现非侵入式功能增强
    • 实现: 集成AspectJ实现
  • 数据访问/集成(Data Access/Integration):

    • 特性: 提供统一事务管理(基于AOP实现)
    • 整合: 支持JDBC、ORM、JMS等技术
  • Web模块:

    • 替代方案: 提供新的Web开发方式替代Servlet
  • Test模块:

    • 用途: 支持单元测试和集成测试

三、核心两大特性

1. IOC / DI(控制反转 + 依赖注入)

(1)IOC 控制反转

传统开发:开发者 new 对象,控制权在代码里。 IOC:对象创建、管理、销毁交给 Spring IOC 容器,控制权反转给框架。 IOC 容器底层:BeanFactory(顶层接口)、ApplicationContext(常用子接口,功能更强)。

(2)DI 依赖注入(IOC 的实现方式)

容器自动给 Bean 注入依赖对象,无需手动 new。 三种注入方式:

  1. 构造器注入(官方推荐,不可变对象、强制依赖)
  2. setter 注入(可选依赖,灵活)
  3. 字段注入(@Autowired,简单但有缺陷,不推荐生产大量使用)

常用 Bean 注解(组件扫描)

// 通用组件
@Component
// 分层细分
@Repository // Dao层
@Service    // 业务层
@Controller // 控制层(MVC)
// 单例/多例
@Scope("singleton") // 默认单例
@Scope("prototype") // 每次获取新建对象

依赖注入注解

  • @Autowired:按类型注入,可配合 @Qualifier("beanName") 按名称
  • @Resource:JSR 规范,先按名称、再按类型
  • @Value:注入普通值、配置文件变量 ${key}

2. AOP 面向切面编程

核心:解耦通用横切逻辑(日志、事务、权限、监控、异常处理) 不修改业务代码,动态增强方法。

核心概念

  1. 切面 Aspect:横切逻辑类(日志类)

  2. 连接点 JoinPoint:所有可被拦截的方法

  3. 切点 Pointcut:匹配要拦截的方法表达式 execution(* com.xxx.service.*.*(..))

  4. 通知 Advice:切面执行时机

    • @Before:方法执行前
    • @AfterReturning:正常返回后
    • @AfterThrowing:异常抛出后
    • @After:无论正常 / 异常最终执行
    • @Around:环绕,可控制方法执行、返回值