1 回答
TA贡献1846条经验 获得超7个赞
我已经看到这可以通过“bnd”之类的工具来实现,但目前我正在使用 Kura。
bnd 项目是一个主要在构建时使用的工具,用于帮助您为 OSGi 包组装元数据。使用 bnd 来帮助制作您的包,然后在运行时在像 Kura 这样的平台中使用它完全没有问题。
我正在尝试做一个物联网项目,我需要在其中实施一些 OSGi 服务。
实现 OSGi 服务的最简单方法是使用称为声明式服务的注入框架。这允许您编写一个将在 OSGi 服务注册表中注册的简单 POJO。这就像添加@Component到类一样简单:
@Component
public class MyComponent implements SomeService {
@Override
public void someServiceMethod() { }
}
上面的组件会自动注册为a,SomeService因为它实现了接口。Kura 平台包含声明式服务实现,因此您无需安装任何其他内容。但是,您应该根据 Kura 支持的版本(3.x 的 Kura 使用 DS 1.2,4.x 使用 DS 1.3)检查您使用的注释的版本。
问题是这些服务需要在它们之间发送信息。
使用 DS 实现的 OSGi 服务能够使用@Reference注释以一种非常干净和简单的方式相互引用。
@Component
public class MyComponent implements SomeService {
SomeOtherService someOtherService;
@Reference
void setSomeOtherService(SomeOtherService sos) {
someOtherService = sos;
}
@Override
public void someServiceMethod() {
someOtherService.doSomethingElse();
}
}
如果您能够使用 DS 1.3,那么 @Reference 注释可以直接应用于字段:
@Component
public class MyComponent implements SomeService {
@Reference
SomeOtherService someOtherService;
@Override
public void someServiceMethod() {
someOtherService.doSomethingElse();
}
}
在OSGi enRoute 项目中有更多使用声明式服务和其他 OSGi 规范的例子
添加回答
举报