欢迎光临
我们一直在努力

【Spring框架学习(一)】:从设计思想到核心架构全面认识Spring

Spring框架学习系列:

  • 《Spring框架学习(一):从设计思想到核心架构全面认识Spring》
  • 《Spring框架学习(二):IOC核心原理与Bean创建流程》
  • 《Spring框架学习(三):Spring Bean生命周期源码解析》
  • 《Spring框架学习(四):Spring AOP动态代理实现原理》
  • 《Spring框架学习(五):Spring MVC请求处理流程解析》
  • 《Spring框架学习(六):Spring事务实现原理》
  • 《Spring框架学习(七):Spring Boot自动配置原理》
  • 《Spring框架学习(八):Spring源码整体流程总结》

一、前言

在 Java 后端开发领域,Spring 框架几乎是每个 Java 开发者都绕不开的技术。

无论是传统单体项目,还是现在流行的微服务架构:

  • Spring MVC
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • Spring Data

都建立在 Spring Framework 的基础之上。

但是很多初学者学习 Spring 时,往往会陷入一个误区:

只会使用注解,却不了解 Spring 为什么这样设计。

例如:

@Autowired
private UserService userService;

很多开发者知道它可以自动注入对象,但是不知道:

  • 对象是谁创建的?
  • 为什么可以自动找到?
  • Spring 如何管理对象生命周期?
  • 注解背后的实现原理是什么?

因此,学习 Spring 不能只停留在使用层面,更应该理解它背后的设计思想。

本文作为 Spring 学习系列第一篇,将从整体角度认识 Spring。


二、Spring是什么?

2.1 Spring简介

Spring 是一个开源的 Java 企业级开发框架。

它最初由 Rod Johnson 在 2003 年提出。

Spring 的核心目标:

简化 Java 企业级应用开发。

在 Spring 出现之前,Java 企业开发主要依赖 EJB(Enterprise JavaBeans)。

虽然 EJB 提供了企业级能力,但是存在很多问题:

  • 学习成本高
  • 配置复杂
  • 代码耦合严重
  • 测试困难

Spring 的出现,就是为了提供一种更加简单、灵活的开发方式。


三、Spring解决了什么问题?

在传统 Java 开发中,一个类经常需要主动创建其他对象。

例如:

public class UserController {

private UserService userService =
new UserServiceImpl();

}

这里存在一个问题:

UserController 和 UserServiceImpl 强耦合。

如果以后需要替换实现:

UserServiceV2Impl

就必须修改代码。

当项目规模越来越大:

  • 类越来越多
  • 依赖关系越来越复杂

代码维护成本会越来越高。

Spring 主要解决三个核心问题:


1. 降低对象之间的耦合

通过 IOC(控制反转)

让对象创建交给 Spring 管理。

以前:

程序主动创建对象

现在:

Spring创建对象
程序直接使用


2. 提高代码复用能力

通过 AOP(面向切面编程)

将公共逻辑抽离。

例如:

系统中很多地方需要:

  • 日志记录
  • 权限验证
  • 事务控制

以前:

每个方法重复编写。

现在:

统一交给切面处理。


3. 简化企业开发

Spring 提供大量基础能力:

例如:

  • 数据访问
  • 事务管理
  • Web开发
  • 安全认证

开发者只需要关注业务代码。


四、Spring核心设计思想

Spring 最核心的两个思想:

1. IOC(控制反转)

2. AOP(面向切面编程)

这两个思想贯穿整个 Spring。


五、IOC:控制反转

5.1 什么是IOC?

IOC:Inversion of Control

中文:控制反转。

简单理解:

将对象的创建和管理权交给 Spring 容器。

以前:

UserService service =
new UserServiceImpl();

对象由开发者创建。

Spring:

@Autowired
private UserService service;

对象由 Spring 创建并注入。

这种控制权的转移:就是控制反转。


5.2 IOC带来的好处

降低耦合

例如:

接口:

public interface UserService {

}

实现:

public class UserServiceImpl
implements UserService{

}

Controller:

@Autowired
private UserService userService;

Controller 不关心具体实现。

未来替换:

UserServiceV2Impl

不需要修改业务代码。


六、DI:依赖注入

很多人会混淆:IOC 和 DI。

实际上:

IOC 是思想。

DI 是实现方式。

DI:Dependency Injection 依赖注入。

例如:

UserController 依赖 UserService。

Spring 自动:

  • 创建 UserService
  • 找到依赖关系
  • 注入 UserController
  • 常见方式:

    属性注入

    @Autowired
    private UserService userService;


    构造方法注入

    public UserController(
    UserService userService){

    this.userService=userService;

    }

    现在企业开发更加推荐:构造方法注入。

    原因:

    • 依赖关系明确
    • 方便测试
    • 避免空指针

    七、AOP:面向切面编程

    7.1 为什么需要AOP?

    假设一个系统:100个接口。

    每个接口都需要:

    • 记录日志
    • 校验权限
    • 开启事务

    如果每个方法都写:

    log();

    checkPermission();

    beginTransaction();

    会产生大量重复代码。

    AOP就是解决这个问题。


    7.2 AOP核心思想

    将公共功能从业务代码中抽离。

    例如:

    业务代码:

    public void save(){

    userDao.save();

    }

    日志代码:

    @Before("save()")
    public void log(){

    }

    执行:

    请求

    AOP代理

    日志处理

    业务方法


    八、Spring整体架构

    Spring Framework主要由以下模块组成:

    Spring Framework

    |

    ————————————————

    | | | | |

    Core Beans Context AOP MVC


    1. Spring Core

    核心模块。

    提供:

    • IOC
    • DI

    是整个 Spring 的基础。


    2. Spring Beans

    负责:

    • Bean创建
    • Bean管理
    • Bean生命周期

    3. Spring Context

    提供:

    ApplicationContext。

    它是开发中最常使用的容器。


    4. Spring AOP

    提供:

    面向切面编程。


    5. Spring MVC

    用于:

    Web开发。

    例如:

    @Controller
    @RequestMapping
    @GetMapping


    九、Spring生态体系

    现在企业开发中,很少只使用 Spring Framework。

    通常:

    Spring Framework

    Spring Boot

    Spring Cloud

    微服务体系


    Spring Framework

    核心能力:

    • IOC
    • AOP
    • MVC

    Spring Boot

    解决:

    Spring配置复杂的问题。

    特点:

    • 自动配置
    • 快速启动
    • 内嵌服务器

    例如:

    以前需要大量XML配置。

    现在:

    一个启动类:

    @SpringBootApplication
    public class Application{

    }

    即可运行。


    Spring Cloud

    用于微服务开发。

    提供:

    • 服务注册
    • 配置中心
    • 网关
    • 服务调用

    十、Spring学习路线

    学习 Spring 推荐按照以下顺序:

    第一阶段:

    Spring基础思想

    IOC

    DI

    AOP

    第二阶段:

    Bean生命周期

    源码分析

    事务原理

    第三阶段:

    Spring MVC

    Spring Boot

    第四阶段:

    Spring Cloud

    微服务架构


    十一、总结

    Spring 并不是简单的一个框架,而是一套完整的企业级开发体系。

    它最核心的思想:

    IOC解决对象管理问题。

    DI实现对象之间的自动依赖。

    AOP解决公共逻辑复用问题。

    理解 Spring不要只记:

    @Autowired

    更重要的是理解:

    对象如何创建?

    对象如何管理?

    依赖如何注入?

    功能如何扩展?

    掌握这些基础之后,后续学习:

    • Spring IOC源码
    • Bean生命周期
    • Spring AOP
    • Spring MVC
    • Spring Boot自动配置

    都会更加容易。


    赞(0)
    未经允许不得转载:171主机测评 » 【Spring框架学习(一)】:从设计思想到核心架构全面认识Spring
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址