目录
什么是依赖注入
属性注入
构造函数注入
Setter 注入
依赖注入的优势
什么是依赖注入
依赖注入是一种设计模式,它通过外部实体(通常是容器)来注入一个对象的依赖关系,而不是在对象内部创建这些依赖关系。这种方式使得对象的创建和管理变得更加灵活,可以轻松地替换和升级各种组件。也就是说依赖注⼊是⼀个过程,是指IoC容器在创建Bean时,去提供运⾏时所依赖的对象。
关于依赖注入,Spring 为我们提供了三种方法:
1. 属性注入(Filed Injection)
2. 构造方法注入(Constructor Injection)
3. Setter 注入(Setter Injection)
属性注入
使⽤ @Autowired 实现的。
@Controller
public class UserController {
//属性注入
@Autowired
private UserService userService;
public void sayHi() {
System.out.println("Hi UserController...");
userService.sayHi();
}
}
构造函数注入
在类的构造⽅法中实现注⼊。
当只有一个构造函数的时候前面可以不加 @Autowired,其他情况必须加上 @Autowired。
当有多个构造函数的时候,Spring 使用会默认无参的构造函数,如果没有会报错。
@Controller
public class UserController2 {
//构造方法注入
private UserService userService;
@Autowired
public UserController2(UserService userService) {
this.userService = userService;
}
public void sayHi() {
System.out.println("Hi UserController2");
userService.sayHi();
}
}
Setter 注入
Setter 注⼊和属性的 Setter ⽅法实现类似,只不过在设置 set ⽅法的时候需要加上 @Autowired 注
解。
@Controller
public class UserController3 {
//setter方法注入
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
public void sayHi() {
System.out.println("Hi UserController3");
userService.sayHi();
}
}
依赖注入的优势
-
松耦合性(Loose Coupling): 依赖注入降低了组件之间的耦合度,使得它们更容易被替换、升级和测试。
-
可测试性: 由于依赖被注入,我们可以轻松地通过模拟对象来进行单元测试,而不必依赖于具体的实现。
-
可维护性: 依赖注入使得代码更易于维护和理解。通过注入依赖,代码的职责更加清晰。
-
灵活性: 可以通过配置文件或注解来改变对象之间的关系,而无需修改代码,提高了系统的灵活性。