提供OSGi服务而不实现接口

问题描述 投票:0回答:1

样本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和类命名(不是隐式后缀,而是特定名称)。如果选择示例2,则它不适用于OSGi环境。我很困惑该怎么办。

java design-patterns dependency-injection osgi inversion-of-control
1个回答
0
投票

在没有接口的情况下创建服务是可能的,甚至在OSGi中很常见。我经常使用它来连接捆绑包外部不可见的内部组件。

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

@Component(service=Service.class)
public class Service {

  public void foo() {
  } 
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.