You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:01:06