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

如何创建OSGi组件的多个唯一实例?基于DS 1.2及注解实现

实现OSGi DS单例UrlManager组件,确保其他组件获取唯一实例

在OSGi Declarative Services(DS)1.2中,要让UrlManager成为全局唯一实例,只需在组件注解中显式声明单例作用域即可(DS默认实例策略就是单例,显式声明能避免配置变更带来的意外)。

修改后的UrlManager组件代码

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ServiceScope;

@Component(
    immediate = true,
    name = "UrlManager",
    service = {UrlManager.class},
    scope = ServiceScope.SINGLETON // 显式指定单例作用域
)
public class UrlManager implements Urls {
    public String getId() {
        // 实现你的业务逻辑
        return "unique-url-manager-instance-id";
    }
}

关键说明

  • scope = ServiceScope.SINGLETON:核心配置项,告诉OSGi容器该组件仅创建一个实例,所有依赖该组件的服务都会绑定到这个唯一实例。
  • 其他组件通过@Reference注解绑定UrlManager时,默认就会获取到这个单例实例,无需额外配置。示例:
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component
public class BusinessComponent {
    @Reference
    private UrlManager urlManager;

    // 这里使用的urlManager始终是同一个实例
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:52:06