Java 的依赖注入容器:Spring IoC、Google Guice 和 Dagger

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 的依赖注入容器:流行解决方案的概述与比较



在现代 Java 开发中,依赖注入 (DI) 是一种基础设计模式,它允许构建松耦合、可测试且易于维护的应用程序。与其在类内部创建依赖关系(通过 new),DI 从外部传入准备好的对象。管理此过程的是 DI 容器——一个专门的库,它扫描类,根据指定规则创建和连接对象(Bean)。



在本文中,我们将介绍 Java 中最流行的三个 DI 容器:Spring IoC(Spring Framework 的一部分)、Google Guice 和 Dagger。每个容器都有其独特的特点、理念和适用领域。您将了解它们的工作原理、优缺点,以及为您的项目选择哪个容器。



什么是依赖注入容器?



DI 容器是一个程序(或库),它自动化了对象及其依赖关系的创建过程。您描述哪些类应该被创建以及它们如何关联,而容器则负责实例化、配置和注入的日常任务。容器的主要职责包括:



  • 创建对象——容器按需创建类的实例。
  • 管理生命周期——确定对象何时创建、存活和销毁(单例、原型、请求范围)。
  • 解析依赖关系——自动查找并将所需对象注入到构造函数、字段或方法中。
  • 配置——允许通过注解、XML 或 Java 配置来设置参数。


使用 DI 容器具有以下优点:

  • 降低代码耦合度——类不知道其依赖关系是如何创建的。
  • 简化测试——可以轻松地用模拟对象替换真实依赖。
  • 提高可重用性——组件变得独立且易于替换。
  • 集中管理配置——所有设置都在一个地方。


Spring IoC(控制反转)



Spring Framework 是 Java 生态系统中最流行的 DI 容器。其 IoC 容器(通常称为 ApplicationContext)支持多种配置方式:XML、注解和 Java 配置。Spring IoC 是 Spring Boot、Spring MVC、Spring Data 和许多其他项目的基础。



通过 Java 类进行配置的示例:



import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;

@Configurationpublic class AppConfig {

@Bean public UserRepository userRepository() { return new JdbcUserRepository(); }

@Bean public UserService userService(UserRepository userRepository) { return new UserServiceImpl(userRepository); }}


使用 @Component、@Autowired 和 @Service 注解的相同示例:



import org.springframework.stereotype.Service;import org.springframework.beans.factory.annotation.Autowired;

@Servicepublic class UserServiceImpl implements UserService {

private final UserRepository userRepository;

@Autowired public UserServiceImpl(UserRepository userRepository) { this.userRepository = userRepository; }}


Spring IoC 的优点:

  • 庞大的社区和文档。
  • 与其他 Spring 模块(AOP、事务、安全)的深度集成。
  • 支持不同的作用域(单例、原型、请求、会话)。
  • 强大的事件和配置文件系统。


推荐