【问题标题】:Providing OSGi Service Without Implementing Interface在不实现接口的情况下提供 OSGi 服务
【发布时间】:2020-02-27 12:07:51
【问题描述】:

示例 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 中)。但是,Service 接口是由单个类实现的。根据 YAGNI 设计原则,不需要为一个类创建接口。与其这样做,不如创建具有方法的类(在示例 2 中)。如果我选择示例一,我将忽略一些约定,包括 YAGNI 和类命名(不是 impl 后缀,而是特定名称)。如果我选择示例 2,它将不适合 OSGi 环境。我很困惑我该怎么做。

【问题讨论】:

    标签: java design-patterns dependency-injection osgi inversion-of-control


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多