Skip to content

IoC(控制反转)是思想,DI(依赖注入)是实现这种思想的最常用方式。

🆚 本质区别

对比维度IoC/DIAOP
解决的问题对象之间的依赖关系管理横切关注点的逻辑复用与解耦
核心目标“谁来创建对象?谁来管理依赖?”“如何在不侵入代码的前提下,统一加功能?”
典型场景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);
    }
}
  • @AutowiredIoC/DI 的体现:你不用 new UserRepository(),容器帮你注入。

  • @Transactional@LogExecutionTimeAOP 的体现:你没写开启事务、没写测时间,但功能自动加上了。

👉 它们“感觉像”,是因为都通过注解 + 框架自动处理,实现了“代码简洁 + 功能增强”。


📌 总结:为什么感觉像?因为它们都是“框架帮你做事”

IoC/DIAOP
✅ 都通过注解/配置声明需求@Autowired@Inject@Transactional@Log
✅ 都由框架在运行时/编译期处理容器注入依赖代理/织入切面逻辑
✅ 都减少模板代码,提升可维护性不用手动 new不用反复写日志、事务
✅ 都体现“关注点分离”业务与依赖解耦业务与横切逻辑解耦

✅ 所以你的感觉没错:

在使用方式和开发体验上,IoC/DI 和 AOP 确实很像 —— 它们都是“声明式编程”的典范,让你“只写核心逻辑,其余交给框架”。

但它们的本质目标不同

  • IoC/DI 是“横向解耦”(模块之间)

  • AOP 是“纵向解耦”(逻辑层次之间)

名称类型主要用途特点
HibernateORM 框架Java 对象与数据库表映射全自动 ORM,HQL 查询,适合快速开发
MyBatis持久层框架SQL 映射与结果封装半自动 ORM,手动写 SQL,灵活高效
JPA持久层规范定义 Java 持久化标准接口Hibernate 是其实现,提升可移植性
Redis内存数据存储缓存、Session 存储、分布式锁等高性能、支持多种数据结构、持久化
Kafka消息中间件/流平台消息传递、实时数据流处理高吞吐、持久化、分布式、适用于大数据场景
Vue 生态Spring 生态说明
Vue CLI / ViteSpring Initializr + IDEA / STS都是脚手架工具,用于生成项目模板
create-vuevue createstart.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 CLISpring Initializr
项目模板vite create 生成的项目start.spring.io 生成的项目
路由模块Vue RouterSpring MVC
状态管理Pinia / VuexSpring Service 层(逻辑管理)
数据库模块IndexedDB / Prisma(类比)Spring Data JPA
权限控制vue-authSpring 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
SentinelHystrix
SeataSpring Cloud Alibaba 特有
RocketMQRabbitMQ / Kafka(可共存)
Dubbo(可选)Feign(高性能 RPC 替代)
Nacos的配置类型举例举例说明
数据库连接JDBC URL、用户名、密码、连接池大小
第三方服务地址短信网关 URL、支付接口地址
功能开关(Feature Toggle)是否开启新功能、灰度功能
超时与重试策略HTTP 调用超时时间、重试次数
日志级别将生产环境的 DEBUG 改为 WARN
限流规则每秒最多处理 100 个请求
微服务调用参数目标服务名、负载均衡策略
多环境差异化配置dev / test / prod 使用不同配置
本站总访问量 次 本站访客数 人次

1111111111111111111