Spring推荐使用构造注入而不使用 @Autowired 注解

参考:

  1. https://www.youtube.com/watch?v=CT8dbbe783s
  2. https://blog.csdn.net/qq_43371556/article/details/123529701
  3. https://blog.csdn.net/qq_33721382/article/details/104071801
  4. https://blog.csdn.net/fudaihb/article/details/139231192

什么是依赖注入

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 注解等显式的依赖注入方式。通过这些替代方案,不仅可以提升代码的整体质量,还能在不同的开发阶段(如维护和测试)中,减少不必要的复杂性和潜在问题。

posted @ 2024-07-10 11:57  ashuai~  阅读(138)  评论(0)    收藏  举报