Spring依赖注入的四种方式(面)
目录
1. 构造器注入
2. 字段注入
3. Setter注入
4. 方法注入
最佳实践建议
1. 构造器注入
@Service
public class UserService {private final UserRepository userRepository;@Autowired // Spring 4.3+ 可以省略public UserService(UserRepository userRepository) {this.userRepository = userRepository;}
}
特点是:
- 通过类的构造方法注入依赖
- 不可变的依赖(final属性)
- 推荐使用, 特别是对于强制依赖
- 便于单元测试
2. 字段注入
@Service
public class UserService {@Autowireprivate UserRepository userRepository;
}
特点是:
- 直接在字段上加@Autowir
- 代码简洁,但不够灵活
- 不能用于final字段
-
不推荐使用(难以测试,隐藏依赖关系)
3. Setter注入
@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}
}
特点是:
-
通过setter方法注入依赖
-
适用于可选依赖
-
允许对象在创建后被重新配置
-
比字段注入更易于测试
4. 方法注入
@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic publish(UserRepository userRepository) {this.userRepository = userRepository;}
}
特点:
-
通过任意方法注入依赖
-
方法名可以自定义,不限于setter
-
可以用于初始化逻辑
-
支持多个参数注入
最佳实践建议
-
优先使用构造器注入 - 特别是对于强制依赖
-
可选依赖使用setter注入
-
避免使用字段注入 - 虽然方便但不利于测试和维护
-
对于复杂初始化逻辑使用方法注入