在没有实现接口的情况下提供OSGi服务



样品1

@Component(policy = ConfigurationPolicy.OPTIONAL, immediate = false)
public class ServiceImpl implement Service {
@Override
public void foo() {
} 
...
}

样品2

@Component(policy = ConfigurationPolicy.OPTIONAL, immediate = false)
public class Service {
public void foo() {
} 
...
}

我有一个由一些方法组成的组件。我想提供一个ServiceImpl类,它将Service接口实现为OSGi服务(在示例1中(。然而,服务接口是由单个类实现的。根据YAGNI的设计原则,不需要只为一个类创建接口。与其这样做,不如创建具有方法的类(在示例2中(。如果我选择示例,我将忽略一些约定,包括YAGNI和类命名(不是impl后缀,而是特定名称(。如果我选择示例2,它将不适合OSGi环境。我不知道该怎么办。

创建一个没有接口的服务是可能的,甚至在OSGi中很常见。我经常使用它来连接束外看不到的内部组件。

您只需要声明您的组件将类导出为服务。

@Component(service=Service.class)
public class Service {
public void foo() {
} 
...
}

最新更新