【问题标题】:Creating a map object similar to user defined objects in OSGI在 OSGI 中创建类似于用户定义对象的地图对象
【发布时间】:2015-11-24 07:40:46
【问题描述】:

我正在尝试使用 osgi @reference 创建一个地图对象,即)将以下类注册为工厂,并将依赖项作为 Hashmap 对象。我的意图是使用应该创建哈希图的工厂创建一个对象。当我试图将其注册为工厂状态时不满意。是否可以通过以下方法创建地图对象?如果没有,任何人都可以让我知道我做错了什么吗?或者为什么我们不应该这样做?因为 Map 是一个接口。

@Component(name = "ExampleComponentFactoryServiceProvider1", factory = "example.factory.provider1")
@Service
public class ExampleComponentFactoryServiceProvider1 implements ExampleFactoryService {

    @Reference(name = "MapObject", bind = "createMap", unbind = "disolveMapObject", referenceInterface = Map.class)
    private Map<String, String> testMap = null;

    @Activate
    public void activate(Map<String, String> props) {
        System.out.println("Activated 1 !!!!!");
    }

    public void createMap(Map<String, String> aMap) {
        this.testMap = aMap;
        System.out.println("Map created !! " + testMap);
    }

    public void disolveMapObject(Map<String, String> aMap) {
        this.testMap = null;
    }

    @Override
    public void start() {
        System.out.println("Started 1 !!!!");
    }

    @Override
    public void stop() {
        System.out.println("Stopped 1 !!!!");
    }
}

【问题讨论】:

    标签: java osgi apache-felix


    【解决方案1】:

    我认为这行不通。 @Reference 用于绑定 OSGi 服务。所以这只有在有人发布了 Map 类型的服务时才有效。

    您希望地图内容来自哪里?

    【讨论】:

    • 知道了!谢谢克里斯蒂安。供参考,即使它是内部 java 对象(地图、列表、设置),也应将其作为服务公开。
    • 是的 .. 虽然我会小心使用地图作为服务,因为它太通用了。您可能会得到错误的机会很高。所以又是这个问题。您的地图内容来自哪里?
    • 我的尝试是直接创建java对象而不是注册为服务。因为我的假设是默认对象不需要将其注册为服务,因为一切都在虚拟机上运行。但是从您的解释中,我了解到所有内容都应该作为服务公开,以便通过引用将其取回。
    • 是的。在 DS 中,这是唯一的方法。问题是你为什么需要@Reference。为什么不简单地自己创建对象?
    猜你喜欢
    • 2019-03-16
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多