gpt4 book ai didi

java - 如何构建具有依赖关系的 OSGi 服务并通过 DS 发布

转载 作者:行者123 更新时间:2023-11-30 07:36:53 24 4
gpt4 key购买 nike

我的示例类:

public class MyModel implements Model
{
:
:
}

public class SingleModelProvider implements ModelProvider
{
public SingleModelProvider(Model providedModel, List actions)
{
:
}
}

计划是在多个包中重用 SingleModelProvider 类以提供 ModelProvider 的不同实现。我需要在每个包中完成的是简单地用构造函数的适当参数实例化 SingleModelProvider。使用任何 DI 框架的非常简单的场景。如果可能,我想使用 DS(声明式服务)注册 ModelProvider 服务,而不必在 Activator 中编写样板代码。

这可能吗?

我似乎找不到任何关于如何完成此操作的文档,因为 DS 中的类声明似乎不允许构造函数参数(或与此相关的 setter)。

我使用工厂吗?我不确定这是否值得,因为它可能比手动使用 Activator 和发布服务更简单。

最佳答案

DS 确实支持二传手。这是基于您问题中示例的 DS xml 示例。

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="SampleModelProvider">
<implementation class="test.SampleModelProvider"/>
<reference bind="setModel" cardinality="1..1" interface="test.Model" name="Model" policy="static" unbind="unsetModel"/>
<reference bind="setList" cardinality="1..1" interface="test.ActionList" name="ActionList" policy="static" unbind="unsetList"/>
<service>
<provide interface="test.ModelProvider"/>
</service>
</scr:component>

使用构造函数参数在某种程度上违背了 OSGi 的动态特性。服务和 bundle 可以随时启动和停止。 OSGi 友好代码需要了解这一点,并具有处理依赖项设置和取消设置的对称方法。

请问您一个问题:在您的系统中,谁负责创建您希望每个提供者接收的模型对象和操作列表?它们可以作为 OSGi 服务使用吗?我提供的示例 DS 假定它们是 OSGi 服务。

关于java - 如何构建具有依赖关系的 OSGi 服务并通过 DS 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3181362/

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