java依赖注入方法
依赖注入主要有以下几种方式,每种方式各有特点,适用于不同场景:
构造函数注入
- 方式:通过类的构造函数将依赖对象传入。
- 示例:
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;} }
- 优点:依赖关系明确,注入的对象不可变(通过
final
修饰),便于单元测试。 - 缺点:若依赖过多,构造函数参数会变得冗长。
字段注入(属性注入)
- 方式:直接通过类的字段(属性)注入依赖对象,通常借助框架(如 Spring)的注解实现。
- 示例:
public class UserService {@Autowiredprivate UserRepository userRepository; }
- 优点:代码简洁,无需修改构造函数或方法。
- 缺点:依赖关系不明确,字段可能为
null
(需框架保证初始化),不利于单元测试(需手动模拟依赖)。
方法注入
- 方式:通过类的方法(通常是 setter 方法)注入依赖对象。
- 示例:
public class UserService {private UserRepository userRepository;public void setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;} }
- 优点:灵活性高,可在对象创建后动态修改依赖。
- 缺点:依赖关系不如构造函数注入明确,可能导致对象状态不一致(未注入依赖时被使用)。
选择建议
- 优先构造函数注入:适用于依赖关系固定、对象创建后依赖不可变的场景,尤其适合构造时必须初始化依赖的情况。
- 字段注入:适合框架驱动的开发(如 Spring Boot),追求代码简洁,但需注意依赖的初始化顺序。
- 方法注入:适用于依赖需要动态变更的场景(如插件式系统),但使用场景相对较少。