小前端学JAVA-第一篇-了解概念

48 阅读5分钟

一直以来都是和Java后台对接接口,想着自己要是能给自己写接口是不是更方便了,所以觉得学学Java。 计划从SpringBoot学起,跟着视频课先大致学习一遍。从今天起开始记录学习过程。可能学的过程有些问题,可能要麻烦大家一起帮我解答。 慢慢来,一步步来,徐徐图之。

概念篇

大概了解一下相关概念,查了资料,似懂非懂的感觉

Spring核心: IOC和AOP 

IOC是什么?

Spring IOC(Inversion of Control,控制反转)是 Spring 框架的核心特性之一。

  • 概念: 在传统的软件开发中,对象的创建和依赖关系的管理通常由程序自身负责。例如,在一个类中需要使用另一个类的实例时,往往会在该类内部直接使用 new 关键字来创建依赖对象。而 Spring IOC 改变了这种方式,它将对象的创建、初始化、销毁等生命周期管理的控制权从应用程序代码转移到了 Spring 容器中。也就是说,由 Spring 容器来负责对象的创建和依赖关系的注入,应用程序只需要使用这些对象即可,这就是所谓的 “控制反转”。 自己理解就是不用依赖的对象不用new的方式,而是用配置文件管理依赖对象了。
  • 实现方式:
    1. 依赖注入
    2. 依赖查找
  • Spring IOC 的优势
  1. 降低耦合度:对象之间的依赖关系由 Spring 容器来管理,使得对象之间的耦合度大大降低。当需要更换依赖对象时,只需要在 Spring 配置文件中进行修改,而不需要修改应用程序代码。
  2. 提高可测试性:由于对象的依赖关系可以通过配置文件进行管理,因此在进行单元测试时,可以很方便地替换依赖对象,使用模拟对象进行测试。
  3. 便于维护和扩展:当系统需要添加新的功能或修改现有功能时,只需要在 Spring 配置文件中进行相应的修改,而不需要对大量的代码进行修改,提高了系统的可维护性和可扩展性。
  4. 实现了对象的生命周期管理:Spring 容器负责对象的创建、初始化、销毁等生命周期管理,使得开发人员可以专注于业务逻辑的实现,而不需要关心对象的生命周期管理问题。

AOP是什么?

这个概念我查了好多文章,读过后感觉可能因为我的水平不行理解都不太透彻,于是我问了DeepSeek。它通过创设一个场景来做解释,非常有助于理解这个概念:

场景设定:开一家奶茶店

假设你开了一家奶茶店,核心业务是  “做奶茶” ,但除了做奶茶,你还需要处理一些重复性杂务,比如:

  • 记录每杯奶茶的订单(日志)
  • 检查顾客是否付了钱(权限验证)
  • 打扫台面卫生(资源清理)
  • 处理顾客投诉(异常处理)

如果用传统方式(OOP),你的奶茶师傅每做一杯奶茶,都得自己处理这些杂务,代码可能长这样:

public void 做奶茶() {
    // 1. 记录订单
    System.out.println("记录:开始做奶茶");
    
    // 2. 检查是否付钱
    if (!检查付钱()) {
        throw new RuntimeException("没付钱!");
    }
    
    // 3. 核心业务:做奶茶
    System.out.println("🥤 做一杯珍珠奶茶");
    
    // 4. 打扫卫生
    System.out.println("打扫台面");
    
    // 5. 处理异常
    try {
        // ... 其他操作
    } catch (Exception e) {
        System.out.println("处理投诉");
    }
}

这样写的问题:杂务代码和核心业务代码混在一起,如果杂务逻辑要修改(比如记录订单的格式),需要改所有奶茶师傅的代码,非常麻烦!


AOP 的解决方案

AOP 的思路是:雇一个“奶茶店管家” ,专门帮你处理所有杂务,让奶茶师傅只专注做奶茶。

1. 管家的职责(切面 Aspect)

管家负责处理所有杂务,比如:

  • 记录订单(日志)
  • 检查付钱(权限)
  • 打扫卫生(资源清理)
  • 处理投诉(异常)

2. 管家如何工作?

管家通过**“动态代理”**技术,在以下时机自动介入:

  • 做奶茶前:检查付钱、记录订单(前置通知 @Before
  • 做奶茶后:打扫台面(后置通知 @After
  • 奶茶做砸了:处理顾客投诉(异常通知 @AfterThrowing
  • 奶茶做好时:问顾客要不要加小料(返回后通知 @AfterReturning

3. 代码变得简洁

奶茶师傅的代码只需关注核心业务

public void 做奶茶() {
    // 核心业务:做奶茶
    System.out.println("🥤 做一杯珍珠奶茶");
}

所有杂务由管家(AOP)自动处理,且可以统一管理

AOP 的核心概念
术语奶茶店比喻实际含义
切面(Aspect)奶茶店管家封装横切逻辑(如日志、权限)的模块
连接点(JoinPoint)做奶茶、做咖啡、做蛋糕程序执行的点(如方法调用)
通知(Advice)管家在何时做何事切面在连接点的具体动作(如@Before)
切点(Pointcut)只拦截“做奶茶”方法定义哪些连接点会被切面拦截的表达式
AOP 的典型应用场景
  1. 日志记录:自动记录每个方法的入参和结果。
  2. 事务管理:方法开始前开启事务,结束后提交或回滚。
  3. 权限校验:在方法执行前检查用户权限。
  4. 性能监控:统计方法耗时。
  5. 异常处理:统一捕获并处理异常。
总结

AOP 就像雇了一个管家,把重复性杂务(日志、事务等)从核心业务中剥离出来,让代码更干净、更易维护。你只需要告诉管家:“在店员做奶茶前后,帮我做这些事”,剩下的交给 Spring 的 AOP 机制自动完成!