参考:
什么是依赖注入
DI (Dependency Injection):依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。
在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。
Spring的依赖注入三种方式
属性注入, 构造方法注入(推荐), setter注入
优雅的解决方案-构造注入
Lombok提供了一个注解@RequiredArgsConstructor, 可以方便我们快速进行构造注入
@RestController
@RequiredArgsConstructor
public class DemoController {
final DemoService demoService;
...
}
注意:
- 使用@RequiredArgsConstructor注解需要导入Lombok 包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok}</version>
</dependency>
-
需要注入的bean必须声明为final
-
基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入
为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解。主要原因包括:
-
构造器注入的优势明显,不仅可以强制依赖变量初始化,还能提高代码的安全性和可维护性。
-
@Autowired 注解的使用会导致代码的隐式依赖关系,降低代码的可读性和可维护性。
-
使用构造器注入或者其它显式的依赖注入方式,可以使代码更易于测试,避免了启动整个 Spring 容器的麻烦。
为了提高代码质量,增强代码的可读性和可测试性,开发者应尽量避免使用 @Autowired 注解,而优先选择构造器注入、Setter 注入或者 Java Config @Bean 注解等显式的依赖注入方式。通过这些替代方案,不仅可以提升代码的整体质量,还能在不同的开发阶段(如维护和测试)中,减少不必要的复杂性和潜在问题。
标签:依赖,Autowired,Spring,代码,注解,注入 From: https://www.cnblogs.com/ashuai123/p/18293778