有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (1) 个答案

  1. # 1 楼答案

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

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

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