为什么我们需要一个接口来定义aem中的每个服务?

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

我已经工作了一段时间,但不知何故从未想过这个。我所研究的每个aem项目在其代码结构中都有一个相似之处。每个写入的服务都有一个接口。

我的问题是为什么我们需要为每项服务提供一个界面?

@reference@inject可以不使用没有接口的服务吗?

service interface osgi aem
1个回答
6
投票

使用接口是将服务的用户与实现分离的好习惯。在许多情况下,您甚至希望拥有一个API包,因此该服务的用户不需要对实现包的maven依赖。

另一方面,您不需要使用接口。特别是当我在组件内部连接组件时,接口通常是不必要的层。在这种情况下,只需直接使用类导出服务。

here for an example

@Component(service = DistributionMetricsService.class)
public class DistributionMetricsService {
...
}

here for the client code

@Reference
private DistributionMetricsService distributionMetricsService;

因此,主要区别在于,如果要使用其实现类导出组件,则必须指定service属性。

© www.soinside.com 2019 - 2024. All rights reserved.