使用@Inject注解时,是否必须编写Setter方法?
@Inject注解是否强制要求编写Setter方法?
答案是不需要,@Inject支持三种依赖注入方式,只有其中一种场景需要Setter方法,其他两种都不需要:
构造器注入(推荐)
直接在类的构造器上标注@Inject,依赖注入容器会通过构造器为类注入所需依赖,无需编写任何Setter方法。这种方式能保证依赖不可变、线程安全,是当前的最佳实践。
示例代码:public class UserService { private final UserRepository userRepository; @Inject public UserService(UserRepository userRepository) { this.userRepository = userRepository; } }字段注入
直接在类的成员字段上标注@Inject,容器会通过反射直接为字段赋值,同样不需要Setter方法。不过这种方式对测试不够友好,且无法保证依赖不可变,一般不推荐在生产代码中大量使用。
示例代码:public class UserService { @Inject private UserRepository userRepository; }Setter注入
只有当你明确需要通过Setter方法注入依赖时,才需要编写对应的Setter并在其上标注@Inject。这种方式适合处理可选依赖,或者需要在运行时动态替换依赖的场景,但不是@Inject的强制要求。
示例代码:public class UserService { private UserRepository userRepository; @Inject public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } }
总结:使用@Inject时,完全不需要强制编写Setter方法,选择哪种注入方式取决于你的业务需求和代码设计规范。
内容的提问来源于stack exchange,提问作者RishabhGoyal
相关产品推荐
相关产品推荐

