2017-04-24 81 views
2

我注意到开发人员创建Apache Felix服务的多种方式。每个附加片段似乎都有效。将需要一些帮助来理解,它的语法是最适合哪种情况为什么要实现创建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注解

    私人ServiceViaInterface serviceViaInterface使用服务的宣言;

示例3:服务实现与@Service注释 值属性的界面 - 服务

@Component 
@Service(ServiceViaInterface.class) 
public class ServiceViaInterfaceImpl implements ServiceViaInterface{ 
} 
  • 通过@Reference注解

    私人ServiceViaInterface serviceViaInterface使用服务的宣言;

回答

1

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

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

样品2 - 通过实现一个接口,然后只需添加@Service注释发布服务 - 是你应该平时做什么。当您使用@Service并且组件直接实现接口时,构建工具推断您的组件希望在该接口下作为服务发布。

示例3在运行时与样本2具有完全相同的效果,它只是在代码中更加明确。有些人喜欢这个,因为它是明确的,其他人(包括我)不喜欢它,因为它是多余的。

相关问题