IOC 和 DI 的核心思想

1. Spring 简介

Spring 是一个轻量级的 Java 开发框架,最初由 Rod Johnson 在 2003 年发布,旨在简化企业级 Java 应用的开发。Spring 通过提供强大的依赖注入(DI)和面向切面编程(AOP)支持,帮助开发者构建松耦合、高可扩展的应用程序。

Spring 主要包含以下核心模块:

  • Spring Core(核心容器):提供 IoC 和 DI 功能。
  • Spring AOP(面向切面编程):用于处理横切关注点,如事务管理、日志等。
  • Spring Data(数据访问):提供 JDBC、JPA、MyBatis 等持久化技术的集成支持。
  • Spring MVC(Web 框架):用于构建 Web 应用。
  • Spring Boot(快速开发框架):简化 Spring 配置,提高开发效率。

2. IoC 和 DI 的概念

2.1 IoC(Inversion of Control,控制反转)

IoC 是一种设计思想,主要用于解耦组件之间的依赖关系。传统的 Java 编程中,对象的创建和依赖关系通常由程序员手动管理,而 IoC 则将这种控制权交给 Spring 容器来管理,从而提高代码的可维护性和灵活性。

示例(传统方式):

public class UserService {
   
    
    
    private UserRepository userRepository;

    public UserService() {
   
    
    
        this.userRepository = new UserRepository();
    }
}

问题: UserService 直接创建 UserRepository,两者紧密耦合,若更换 UserRepository 的实现,则需要修改 UserService 代码。


2.2 DI(Dependency Injection,依赖注入)

DI 是实现 IoC 的具体方式,它通过外部注入依赖,而不是在对象内部创建依赖。Spring 通过构造方法、Setter 方法或注解的方式进行依赖注入,使得组件之间更加松耦合。

示例(使用依赖注入):

public