gpt4 book ai didi

java - 声明式 OSGi 服务

转载 作者:行者123 更新时间:2023-11-29 06:41:45 24 4
gpt4 key购买 nike

我对声明式 OSGi 服务有疑问。我有以下界面:

  public interface PrintService {
public void print();
}

及其实现:

    public class PrintServiceImpl implements PrintService {

@Override
public void print() {
System.out.println("Hello from PrintServiceImpl!");
}
}

OSGI-INF/component.xml :

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="service">
<implementation class="service.PrintServiceImpl"/>
<service>
<provide interface="print.PrintService"/>
</service>
</scr:component>

list .MF:

Service-Component: OSGI-INF/component.xml

在我安装并启动该服务后,没有任何反应。如何激活它并向控制台打印“Hello from PrintServiceImpl!”。

最佳答案

您应该明确表示您希望服务在 bundle 启动时启动。否则,它会延迟实例化,如果没有其他服务需要 PrintService,它根本不会被实例化。

您可以使用属性 enabledimmediate 来控制您的服务生命周期(关于 bundle 生命周期)。 enabled 是微不足道的:指示当 bundle 启动时您的服务是否已启用。 immediate 指示此服务是否是惰性的。 immediate="true"立即启动您的服务,immediate="false" 将应用惰性实例化(即等到其他服务请求此服务服务作为依赖)

例如

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="PrintService"
activate="activate"
deactivate="deactivate"
modified="modified"
enabled="true"
immediate="true">

正如 Chris 提到的,如果你希望你的服务在激活时做一些事情,你应该在 activate 生命周期方法中添加一些代码(注意方法的名称可以在组件中指定描述符就像上面明确完成的那样)

protected final void activate() {
print();
}

关于java - 声明式 OSGi 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009790/

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