gpt4 book ai didi

OSGi 如何运行一项服务的多个实例

转载 作者:行者123 更新时间:2023-12-02 01:03:54 25 4
gpt4 key购买 nike

是否可以在 osgi 框架中运行同一服务的多个实例?更具体地说,我需要启动一个服务的多个实例,但每个实例都应该接收不同的参数。这是因为这些服务具有相似的功能。但是我不想为每个变体编写服务,而是想重用一个实现类。

我已经在framework api中找到了registerService方法。

    ServiceRegistration<?> registration = bundlecontext.registerService(
className, class, null);

但是,我似乎只为每个类创建了一个实例。有解决办法吗?

最好是类似的东西

    ServiceRegistration<?> registration = bundlecontext.registerService(
className + "#" + (++counter), new classInstance(), null);

最佳答案

请注意,将声明式服务与相应的注释一起使用会使这变得非常容易,这是 Apache Sling 代码库的摘录 (ConfiguredFeature.java):

@Component(
name = "org.apache.sling.featureflags.Feature",
metatype = true,
configurationFactory = true,
policy = ConfigurationPolicy.REQUIRE)
@Service
public class ConfiguredFeature implements Feature {

@Property(label = "Name", description = "Short name of this feature")
private static final String NAME = "name";

private String name;

@Activate
private void activate(final Map<String, Object> configuration) {
this.name = PropertiesUtil.toString(configuration.get(NAME), "");
}

...
}

使用 configurationFactory = truepolicy = ConfigurationPolicy.REQUIRE 会导致为每个相应的 OSGi 配置创建此服务的一个实例,这是创建多个的自然方式实例。

关于OSGi 如何运行一项服务的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com