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 帮你加上横切功能(日志、事务等),让业务代码更干净。

相关推荐
时间的拾荒人13 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
秋天的怀念_David13 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
敲上瘾13 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
Java码农也是农13 小时前
Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选
java·spring boot·spring·事务
学长毕设14 小时前
基于SpringBoot的游乐园管理系统-附源码
java·spring boot·后端
码途行者14 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php
SimonKing14 小时前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶14 小时前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
杨凯凡15 小时前
Spring Boot 文件上传怎么做才安全?流式落盘、路径校验与数据库一致性实战
java·spring boot·文件上传·后端安全·数据库一致性
旖旎夜光15 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习