16 Spring框架进阶之Spring依赖注入

在上一篇中,我们探讨了JVM调优,了解了如何通过配置JVM参数来优化Java应用的性能。在这一篇中,我们将深入了解Spring框架中的依赖注入(Dependency Injection)机制,这是Spring框架的核心特性之一。之后,我们将继续在下一篇中讨论Spring AOP(面向切面编程)如何与依赖注入紧密结合。

什么是依赖注入

依赖注入是一种设计模式,可以减少程序间的耦合度。它指的是将对象所依赖的其它对象,通过构造函数、方法或属性的方式注入到当前对象中。这样可以在不改变类内部的情况下,集中管理程序的各种依赖关系。

在Spring框架中,依赖注入是通过IoC容器(控制反转容器)来实现的。IoC容器负责创建对象、管理其生命周期以及解析它们之间的依赖关系。

依赖注入的类型

在Spring中,依赖注入主要有两种类型:

  1. 构造器注入(Constructor Injection)
  2. Setter注入(Setter Injection)

构造器注入

通过构造器进行依赖注入时,所有依赖对象在对象创建时就被传入,这种方式在依赖是必需且不可变时最为合适。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 依赖类
public class UserRepository {
public void save() {
System.out.println("User saved!");
}
}

// 目标类
public class UserService {
private final UserRepository userRepository;

// 构造器注入
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public void registerUser() {
userRepository.save();
}
}

Spring Bean配置

在Spring配置文件中,我们需要如下配置:

1
2
3
4
5
6
7
8
9
10
<beans xmlns="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="userRepository" class="UserRepository"/>
<bean id="userService" class="UserService">
<constructor-arg ref="userRepository"/>
</bean>
</beans>

Setter注入

Setter注入通过类的Setter方法来实现依赖注入。在一些依赖不是必需的情况下,或需要在运行时动态改变依赖时,Setter注入会更灵活。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
public class UserService {
private UserRepository userRepository;

// Setter方法
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}

public void registerUser() {
userRepository.save();
}
}

Spring Bean配置

setter注入的配置方式如下:

1
2
3
4
<bean id="userRepository" class="UserRepository"/>
<bean id="userService" class="UserService">
<property name="userRepository" ref="userRepository"/>
</bean>

总结

依赖注入是Spring的核心特性之一,能够有效地降低类与类之间的耦合度,增强系统的可维护性和可测试性。在本文中,我们进行了构造器注入和Setter注入的详细讨论,展示了如何通过Spring配置来实现这些注入方式。

接下来,我们将在下一篇中探讨Spring AOP,了解如何在注入的基础上将面向切面编程与业务逻辑相结合,从而实现更为优雅的代码结构和更强的功能扩展能力。

至此,关于Spring依赖注入的探讨就到这里。如果你对本篇内容有任何疑问或建议,欢迎随时交流!

16 Spring框架进阶之Spring依赖注入

https://zglg.work/java-one/16/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论