IoC(控制反转)是思想,DI(依赖注入)是实现这种思想的最常用方式。
🆚 本质区别
| 对比维度 | IoC/DI | AOP |
|---|---|---|
| 解决的问题 | 对象之间的依赖关系管理 | 横切关注点的逻辑复用与解耦 |
| 核心目标 | “谁来创建对象?谁来管理依赖?” | “如何在不侵入代码的前提下,统一加功能?” |
| 典型场景 | Service 依赖 Repository,由容器注入 | 在所有方法执行前自动打日志、加事务 |
| 实现方式 | 通过注解(如 @Autowired)标记依赖,由容器注入 | 通过切点(Pointcut)+ 通知(Advice)织入逻辑 |
| 代码层面表现 | 关注“对象从哪来” | 关注“方法执行时加什么逻辑” |
🎯 举个形象的例子
场景:一个用户登录服务
java
@Service
public class UserService {
@Autowired
private UserRepository userRepository; // ← DI:依赖由容器注入
@Transactional // ← AOP:事务切面自动包装
@LogExecutionTime // ← AOP:自定义切面记录耗时
public User login(String name) {
return userRepository.findByName(name);
}
}@Autowired是 IoC/DI 的体现:你不用new UserRepository(),容器帮你注入。@Transactional和@LogExecutionTime是 AOP 的体现:你没写开启事务、没写测时间,但功能自动加上了。
👉 它们“感觉像”,是因为都通过注解 + 框架自动处理,实现了“代码简洁 + 功能增强”。
📌 总结:为什么感觉像?因为它们都是“框架帮你做事”
| IoC/DI | AOP | |
|---|---|---|
| ✅ 都通过注解/配置声明需求 | @Autowired、@Inject | @Transactional、@Log |
| ✅ 都由框架在运行时/编译期处理 | 容器注入依赖 | 代理/织入切面逻辑 |
| ✅ 都减少模板代码,提升可维护性 | 不用手动 new | 不用反复写日志、事务 |
| ✅ 都体现“关注点分离” | 业务与依赖解耦 | 业务与横切逻辑解耦 |
✅ 所以你的感觉没错:
在使用方式和开发体验上,IoC/DI 和 AOP 确实很像 —— 它们都是“声明式编程”的典范,让你“只写核心逻辑,其余交给框架”。
但它们的本质目标不同:
IoC/DI 是“横向解耦”(模块之间)
AOP 是“纵向解耦”(逻辑层次之间)
| 名称 | 类型 | 主要用途 | 特点 |
|---|---|---|---|
| Hibernate | ORM 框架 | Java 对象与数据库表映射 | 全自动 ORM,HQL 查询,适合快速开发 |
| MyBatis | 持久层框架 | SQL 映射与结果封装 | 半自动 ORM,手动写 SQL,灵活高效 |
| JPA | 持久层规范 | 定义 Java 持久化标准接口 | Hibernate 是其实现,提升可移植性 |
| Redis | 内存数据存储 | 缓存、Session 存储、分布式锁等 | 高性能、支持多种数据结构、持久化 |
| Kafka | 消息中间件/流平台 | 消息传递、实时数据流处理 | 高吞吐、持久化、分布式、适用于大数据场景 |
| Vue 生态 | Spring 生态 | 说明 |
|---|---|---|
Vue CLI / Vite | Spring Initializr + IDEA / STS | 都是脚手架工具,用于生成项目模板 |
create-vue 或 vue create | start.spring.io 网站或 IDE 插件 | 选择技术栈后生成项目结构 |
Vue 项目模板(含 src/, main.js, components/ 等) | Spring Boot 项目模板(含 src/main/java, application.yml, pom.xml 等) | 生成的是标准目录结构 |
Vue Router, Pinia, Axios 插件 | Spring Boot Starter(如 spring-boot-starter-web, spring-boot-starter-data-jpa) | 按需引入的功能模块 |
| 概念 | Vue 生态 | Spring 生态 |
|---|---|---|
| 脚手架工具 | Vite / Vue CLI | Spring Initializr |
| 项目模板 | vite create 生成的项目 | start.spring.io 生成的项目 |
| 路由模块 | Vue Router | Spring MVC |
| 状态管理 | Pinia / Vuex | Spring Service 层(逻辑管理) |
| 数据库模块 | IndexedDB / Prisma(类比) | Spring Data JPA |
| 权限控制 | vue-auth | Spring Security |
| 微前端 / 微服务 | qiankun 微前端 | Spring Cloud 微服务 |
| 响应式编程 | Vue 响应式系统 | Spring WebFlux + Reactor |
Nexus 是“Java 后端的 App Store”(托管 JAR 包) Verdaccio / 私有 npm 源 就是“前端的 App Store”(托管 npm 包)
| Spring Cloud Alibaba 组件 | 替代/对接的 Spring Cloud 组件 |
|---|---|
| Nacos动态服务发现与配置管理平台 | Eureka + Spring Cloud Config |
| Sentinel | Hystrix |
| Seata | Spring Cloud Alibaba 特有 |
| RocketMQ | RabbitMQ / Kafka(可共存) |
| Dubbo(可选) | Feign(高性能 RPC 替代) |
| Nacos的配置类型举例 | 举例说明 |
|---|---|
| 数据库连接 | JDBC URL、用户名、密码、连接池大小 |
| 第三方服务地址 | 短信网关 URL、支付接口地址 |
| 功能开关(Feature Toggle) | 是否开启新功能、灰度功能 |
| 超时与重试策略 | HTTP 调用超时时间、重试次数 |
| 日志级别 | 将生产环境的 DEBUG 改为 WARN |
| 限流规则 | 每秒最多处理 100 个请求 |
| 微服务调用参数 | 目标服务名、负载均衡策略 |
| 多环境差异化配置 | dev / test / prod 使用不同配置 |