gpt4 book ai didi

java - 是否可以通过注入(inject)解决以编程方式创建 OSGI 服务

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:51 25 4
gpt4 key购买 nike

不幸的是,我无法找到一种方法来通过已解析的引用以编程方式创建 osgi 服务。众所周知,OSGi 将服务创建为单例对象。由于某些原因,我需要手动创建新的服务实例。

案例:

@Service(ICasualService.class)
@Component(immediate = true, label = "Casual Service")
public class CasualService implements ICasualService {

@Reference
private ConfigurationAdmin configurationAdmin;
}

使用 Bundle Context 我可以注册我的服务:

private BundleContext bundleContext;
ICasualService casualService = new CasualService();
Dictionary props = new Properties();
bundleContext.registerService(ICasualService.class.getName(), casualService, props);

但是,这种方式configurationAdmin在新创建的服务中是空的。

问题是是否可以通过编程方式创建服务的新实例?

谢谢。

更新:解决方案应该适用于 Felix(OSGi 实现)。

最佳答案

您可以使用 ComponentFactory 来创建组件的实例。参见 this article at Vogella .

在您要以编程方式创建的组件上使用它:

@Component(factory="fipro.oneshot.factory")

然后在另一个组件中你可以获得ComponentFactory:

@Reference(target = "(component.factory=fipro.oneshot.factory)")
private ComponentFactory factory;

并从中创建一个实例:

ComponentInstance instance = this.factory.newInstance(null);
OneShot shooter = (OneShot) instance.getInstance();

关于java - 是否可以通过注入(inject)解决以编程方式创建 OSGI 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786624/

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