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