首页 文章

为什么要实现创建Apache Felix服务的接口?

提问于
浏览
2

我注意到开发人员创建Apache Felix服务的多种方式 . 每个附加的片段似乎都有效 . 需要一些帮助才能理解,哪种语法最适合哪种情况

示例1:没有界面创建的服务

  • 服务声明

d

@Component
@Service(ServiceViaClass.class)
public class ServiceViaClass{
}
  • 通过@Reference批注使用服务

private ServiceViaClass serviceViaClass;

示例2:服务实现界面 . @Service注释没有值属性 - 服务声明

@Component
@Service
public class ServiceViaInterfaceImpl implements ServiceViaInterface{
}
  • 通过@Reference批注使用服务

private ServiceViaInterface serviceViaInterface;

示例3:具有@Service注释的value属性的服务实现接口 - 服务声明

@Component
@Service(ServiceViaInterface.class)
public class ServiceViaInterfaceImpl implements ServiceViaInterface{
}
  • 通过@Reference批注使用服务

private ServiceViaInterface serviceViaInterface;

1 回答

  • 1

    组件实现接口并将其自身发布为该接口下的服务,以便客户端可以仅使用接口查找组件 .

    Sample 1 - 使用组件的具体类型发布服务 - 几乎总是无用的 . 该服务只能使用具体类型找到,如果客户端可以看到具体类型,那么为什么不直接实例化它而不是从服务注册表中获取实例?

    Sample 2 - 通过实现接口发布服务,然后只需添加 @Service 注释 - 就是您通常应该做的事情 . 当您使用 @Service 并且组件直接实现接口时,构建工具会推断您的组件希望在该接口下作为服务发布 .

    Sample 3 在运行时与样本2具有完全相同的效果,它显式,其他(包括我)不喜欢它,因为它是多余的 .

相关问题