Зачем нам нужен интерфейс для определения каждого сервиса в aem? - PullRequest
2 голосов
/ 23 апреля 2019

Я работал с некоторое время, но почему-то никогда не думал об этом.Каждый проект AEM, над которым я работал, имеет одно сходство в структуре кода.Существует интерфейс для каждого написанного сервиса.

Мой вопрос: зачем нам нужен интерфейс для каждой службы?

Может ли @reference или @inject не использовать службы без интерфейса?

1 Ответ

6 голосов
/ 23 апреля 2019

Использование интерфейсов является хорошей практикой для отделения пользователя службы от реализации.Во многих случаях вам даже нужно иметь пакет API, поэтому пользователю службы не требуется зависимость maven от пакета реализации.

С другой стороны, вам не нужно использовать интерфейсы.Особенно когда я соединяю компоненты внутри связки, интерфейсы часто являются ненужным уровнем.В этом случае просто экспортируйте службу напрямую с классом.

См. здесь для примера :

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

и здесь для кода клиента :

@Reference
private DistributionMetricsService distributionMetricsService;

Таким образом, основное отличие состоит в том, что вы должны указать свойство service, если хотите экспортировать компонент с его классом реализации.

...