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

如何不通过REST调用带依赖注入的REST服务类方法 解决依赖为空问题

问题根源

你直接通过new SyncRequest()手动实例化对象时,绕过了项目的依赖注入容器管理,容器不会自动为你填充NotebookService、UserManager、ActiveObjects这些依赖,因此所有注入字段都会为null。

正确实现方案

方案1:在可被DI容器管理的类中直接注入SyncRequest(最优方案)

如果调用SyncRequest的外部类本身也受容器管理(比如同为REST服务类、业务Service类、容器管理的组件等),直接在外部类的构造函数上加@Inject注解注入SyncRequest实例即可。
示例代码:

// 调用SyncRequest的外部类,需确保它本身被DI容器识别管理
@Named
public class OtherBusinessService {
    private final SyncRequest syncRequest;

    @Inject
    public OtherBusinessService(SyncRequest syncRequest) {
        this.syncRequest = syncRequest;
    }

    public void yourBusinessMethod() {
        // 直接调用方法即可,所有依赖已经被容器自动填充完成
        String result = syncRequest.doSomething();
    }
}

方案2:调用类无法被DI容器管理时,手动从容器上下文获取实例

如果你是在无法被容器扫描的普通类中调用,可以通过容器上下文工具手动获取已经完成依赖注入的SyncRequest实例,不要自行new对象。如果是Atlassian插件开发场景,可以用官方提供的ComponentLocator获取:
示例代码:

import com.atlassian.sal.api.component.ComponentLocator;

public class YourOrdinaryClass {
    public void yourMethod() {
        // 从容器中获取已经完成依赖注入的SyncRequest实例
        SyncRequest syncRequest = ComponentLocator.getComponent(SyncRequest.class);
        String result = syncRequest.doSomething();
    }
}
注意事项
  • 确保SyncRequest类已经被DI容器扫描识别,可给SyncRequest补充@Named/@Component注解标记为容器管理组件,或者确认Spring扫描配置包含了该类所在的包路径。
  • 所有声明了依赖注入的类都不要手动new实例,所有实例都优先通过注入或者容器上下文获取。

内容的提问来源于stack exchange,提问作者MarkoRocko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:24:03