gpt4 book ai didi

java - 何时使用 ServiceTracker 与 ServiceReference

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:20 26 4
gpt4 key购买 nike

我刚刚开始使用 OSGi 编程,并且遇到了两种监听服务被激活的方法。

第一种方式,来自 EclipseRCP 书籍,使用 ServiceReference:

String filter="(objectclass="+IModelCreator.class.getName()+")";
context.addServiceListener(this, filter);
modelCreators = Collections.synchronizedMap(
new HashMap<ModelID, List<IModelCreator>>());
ServiceReference references[] = context.getServiceReferences(null, filter);
if(references==null) return;
for(int i=0;i<references.length;++i) {
this.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
references[i]));
}

第二个,来自互联网示例,使用 ServiceTracker:

ServiceTracker logReaderTracker = new ServiceTracker(context,
org.osgi.service.log.LogReaderService.class.getName(), null);
logReaderTracker.open();
Object[] readers = logReaderTracker.getServices();
if (readers != null) {
for (int i = 0; i < readers.length; i++) {
LogReaderService lrs = (LogReaderService) readers[i];
m_readers.add(lrs);
lrs.addLogListener(m_logger);
}
}
logReaderTracker.close();

其中哪一个是保存实现给定接口(interface)的所有服务的注册的正确和/或最佳方法?还有另一种方法可以做到这一点吗?为什么似乎有两种方法可以做同样的事情?

最佳答案

正如您已经可以从包名 org.osgi.util.tracker.ServiceTracker 派生出的那样,ServiceTracker 是一个实用程序类(在某些情况下)

simplifies using services from the Framework's service registry.

在编程中总是有几种做事的方法。您可以自己管理 ServiceReferences,或者如果它适合您或您的问题,请使用具有其用例的捆绑实用程序类。

同时检查这个 Best practices for accessing services

一些其他来源指出,大多数时候使用 ServiceTracker

是明智的

A Comparison of Eclipse Extensions and OSGi Services

OSGi Service Tracker

Getting Started with OSGi: Consuming a Service

关于java - 何时使用 ServiceTracker 与 ServiceReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751918/

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