引言
在 Spring 框架开发中,@Autowired
注解曾经是依赖注入(DI)的“标配”,开发者习惯用它快速实现 Bean 的自动装配。然而,随着 Spring 版本的迭代和开发实践的演进,官方文档和主流 IDE(如 IntelliJ IDEA)逐渐不推荐直接使用 @Autowired
注解,甚至会在代码中给出警告提示。本文将从技术原理和最佳实践的角度,解析这一变化的原因。
一、@Autowired
的核心问题:违背依赖注入的设计原则
依赖注入(Dependency Injection, DI)的核心思想是 “控制反转”(IoC),即由框架管理对象的创建和依赖关系,而非开发者手动控制。而 @Autowired
的默认使用方式(字段注入)却可能破坏这一原则,具体体现在以下几个方面:
-
不可变的依赖关系
字段注入(Field Injection)直接将依赖注入到类的成员变量中,导致依赖关系被声明为非final
(无法使用final
修饰符),这意味着依赖在对象创建后仍可被修改,违背了不可变对象的设计原则。@Service public class UserService { @Autowired // 依赖不可变?无法用 final! private U