Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Spring Framework

    • Spring Framework概述
    • Spring IOC容器
    • Spring 依赖注入
      • 依赖注入的概念
      • 依赖注入的方式
        • 1. 构造器注入
        • 2. Setter方法注入
        • 3. 字段注入
      • @Autowired注解
      • @Qualifier注解
      • 依赖注入的优点
      • 总结
    • Spring AOP
    • Spring Web
  • Spring Boot

    • Spring Boot概述
    • Spring Boot自动配置
    • 内嵌Web服务器
  • Spring Cloud

    • Spring Cloud概述
    • Spring Cloud Netflix
    • Spring Cloud Alibaba
  • Spring Security

    • Spring Security概述
  • Spring
  • Spring Framework
Wray
2024-11-01
目录

Spring 依赖注入

依赖注入(Dependency Injection, DI)是Spring IoC的重要实现方式,通过将对象的依赖交由容器管理,DI能够极大地降低代码的耦合度,使应用程序的各个组件更加独立。依赖注入是实现控制反转(Inversion of Control, IoC)的核心机制之一。

# 依赖注入的概念

依赖注入是一种设计模式,用于将对象的依赖关系通过外部的方式注入到对象中,而不是由对象自己去创建或查找它所依赖的组件。这种方式将对象之间的依赖关系从代码中移除,交由IoC容器统一管理,从而实现组件解耦和模块化。

依赖注入的主要实现方式包括:

  1. 构造器注入
  2. Setter方法注入
  3. 字段注入

# 依赖注入的方式

# 1. 构造器注入

构造器注入是通过对象的构造函数来传递依赖对象的。构造器注入在对象被创建时就可以确保所有必需的依赖都已经提供,因此适用于依赖关系明确且必须的场景。

示例:

@Component
public class MyService {
    private final MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

在上述代码中,MyRepository通过构造函数被注入到MyService中。这样可以确保MyService在创建时就已经具备了必要的依赖。

# 2. Setter方法注入

Setter方法注入通过公开的Setter方法将依赖对象传递给目标对象。Setter方法注入适用于那些可选的依赖关系,这些依赖可以在对象创建之后进行设置。

示例:

@Component
public class MyService {
    private MyRepository myRepository;

    @Autowired
    public void setMyRepository(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

在此示例中,setMyRepository方法用于注入MyRepository,该方法在对象创建之后被调用。

# 3. 字段注入

字段注入是通过在对象的字段上直接使用@Autowired注解来注入依赖,代码更加简洁,但这种方式的缺点是难以进行单元测试,因为没有构造函数或Setter方法可以用于传递Mock对象。

示例:

@Component
public class MyService {
    @Autowired
    private MyRepository myRepository;
}

字段注入虽然简洁,但在测试环境中不如构造器注入和Setter方法注入灵活,因此在实际开发中应谨慎使用。

# @Autowired注解

@Autowired是Spring中最常用的注解之一,用于自动注入依赖对象。Spring容器会自动扫描并查找与注入点匹配的Bean并将其注入。

  • 构造器注入:可以在构造函数上使用@Autowired注解,Spring会自动调用该构造函数。
  • Setter方法注入:可以在Setter方法上使用@Autowired注解,Spring会在对象创建之后调用该方法进行依赖注入。
  • 字段注入:可以直接在字段上使用@Autowired注解,Spring会通过反射机制将依赖对象注入。

# @Qualifier注解

在某些情况下,Spring容器中可能有多个相同类型的Bean,这时可以使用@Qualifier注解来明确指定需要注入的Bean。

示例:

@Component
public class MyService {
    @Autowired
    @Qualifier("specificRepository")
    private MyRepository myRepository;
}

通过@Qualifier注解,可以告诉Spring容器注入名为specificRepository的MyRepository实例,从而避免因多个相同类型的Bean而引起的歧义。

# 依赖注入的优点

  1. 降低耦合度:将依赖关系交由Spring容器管理,各组件之间实现了松耦合,增强了代码的可维护性和可测试性。
  2. 代码简洁:依赖注入避免了在代码中显式地创建和管理对象,减少了样板代码,使代码更加简洁易读。
  3. 可测试性强:使用依赖注入,开发人员可以轻松替换依赖对象为Mock对象,从而进行单元测试。

# 总结

依赖注入是Spring Framework实现控制反转的重要手段,通过将对象的依赖关系交由Spring容器管理,实现了组件解耦和模块化开发。Spring提供了多种依赖注入的方式,包括构造器注入、Setter方法注入和字段注入,每种方式都有各自的适用场景和优缺点。通过依赖注入,开发人员可以更加专注于业务逻辑的实现,而不必担心对象的创建和依赖管理。

上次更新: 2024/11/01, 14:19:53
Spring IOC容器
Spring AOP

← Spring IOC容器 Spring AOP→

Copyright © 2023-2024 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式