Spring的两大核心

1.控制反转(IoC,Inversion of Control)

复制代码
# Spring 框架的两大核心
​
Spring 框架的两大核心是 **控制反转(IoC)** 和 **面向切面编程(AOP)**,通俗易懂地解释如下:
​
---
​
**通俗理解**:  
你不用自己去创建对象或管理依赖了,Spring 帮你自动安排好谁用谁。
​
**比喻**:  
就像你去餐厅点餐,不用自己去厨房做菜,厨师(Spring)帮你准备好了。
​
**实际作用**:
​
- 以前的写法:
```java
Car car = new Car();
Engine engine = new Engine();
car.setEngine(engine);
  • 使用 Spring IoC:
复制代码
@Component
public class Car {
    @Autowired
    private Engine engine;
}

Spring 自动帮你把 Engine 注入到 Car,无需手动创建。


2.面向切面编程(AOP,Aspect-Oriented Programming)

通俗理解: 把"公共逻辑"独立出来,自动帮你在程序运行的某些地方加上。

比喻: 就像你在衣服上加口袋或拉链,衣服本身不用改太多,就能有新功能。

实际作用

  • 典型场景:日志记录、事务管理、权限检查。

  • 以前写法:

复制代码
public void doSomething() {
    log.info("开始方法");
    // 业务逻辑
    log.info("结束方法");
}
  • 使用 AOP:
复制代码
@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        log.info("方法开始");
    }
​
    @After("execution(* com.example.service.*.*(..))")
    public void logAfter() {
        log.info("方法结束");
    }
}

Spring 自动在方法执行前后加日志,业务代码干净简洁。


3.IoC 与 AOP 的示意图

复制代码
          +---------------------+
          |       Spring        |
          |  (IoC 容器管理对象) |
          +---------------------+
                   |
          +---------------------+
          |       业务对象       |
          |     (Car, Engine)    |
          +---------------------+
                   ^
                   |
          +---------------------+
          |       AOP 切面       |
          | (日志/事务/权限等)   |
          +---------------------+
  • IoC:帮你管理对象和依赖

  • AOP:帮你在方法执行前后加上额外功能(切面)


总结

  • IoC:Spring 帮你管理对象和依赖,让你专注业务逻辑。

  • AOP:Spring 帮你加上横切功能(日志、事务等),让业务代码更干净。

相关推荐
天若有情67310 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
qq_5895681010 小时前
springbootweb案例,出现访问 http://localhost:8080/list 一直处于浏览器运转阶段
java·网络协议·http·list·springboot
JAVA面经实录91710 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
特种加菲猫10 小时前
继承,一场跨越时空的对话
开发语言·c++
AC赳赳老秦10 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
FYKJ_201011 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
玩转单片机与嵌入式11 小时前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
茉莉玫瑰花茶12 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
书源丶12 小时前
三十六、File 类与 IO 流基础——文件操作的「第一步」
java