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

相关推荐
皮卡蛋炒饭.2 小时前
Linux进程信号
开发语言·c++
Elastic 中国社区官方博客2 小时前
用于 IntelliJ IDEA 的新 ES|QL 插件
java·大数据·数据库·ide·elasticsearch·搜索引擎·intellij-idea
API快乐传递者2 小时前
Python 爬虫获取 1688 商品详情 API 接口实战指南
java·前端·python
MX_93592 小时前
Spring MVC全注解开发实现及其原理
java·spring·mvc
报错小能手2 小时前
ios开发方向——swift并发进阶核心 Task、Actor、await 详解
开发语言·学习·ios·swift
凯尔萨厮2 小时前
创建Web项目(Maven管理)
java·maven·web
小辉同志2 小时前
208. 实现 Trie (前缀树)
开发语言·c++·leetcode·图论
A-刘晨阳2 小时前
当数据学会“秒回“:工业4.0时代的实时计算革命
开发语言·数据库·perl
沐知全栈开发2 小时前
Lua 基本语法
开发语言