2014-08-01 4 views
0

При разработке приложений Java EE очень много кодовых табличек.Spring Data, @Service - Вам нужен интерфейс?

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

Я спрашиваю, так как @Service аннотация используется для класса, а не для интерфейса.

@ Repository, например, используется на интерфейсе.

Каковы были бы последствия использования интерфейса для службы? Будет ли @Transaction и другие аннотации работать так, как ожидалось?

Я понимаю, что Grails и другие Frameworks не нуждаются в интерфейсах, хотя вы бы сказали, что это хорошо для бизнес-логики, а что нет, я понимаю этот аспект, но это не всегда необходимо и может быть добавляется после этого, когда есть необходимость.

+2

Вы пробовали? – sp00m

+0

Нет, мое приложение довольно пусто, и моя забота заключается в том, что многие другие вещи, такие как @Transaction и т. Д., Которые я не знаю, как тестировать, будут работать, не зная об этом. – momomo

+1

Если вы написали простой проект и вы не планируете отказаться от других реализаций вашей службы, достаточно одного конкретного класса. – Bart

ответ

1

Нет никакой реальной опасности при использовании интерфейса для вашего обслуживания. Не использовать его просто означает, что ваш код глубоко связан с реализацией службы. На практике я не создаю интерфейс для своих сервисов. Я просто комментирую свой конкретный класс службой, потому что редко бывает, что мне нужен общий класс обслуживания, который имеет несколько реализаций. Репозиторий, с другой стороны, вы часто увидите интерфейс, аннотированный репозиторием, потому что Spring Data использует AOP для создания экземпляра вашего репозитория во время выполнения. Что вы можете сделать, если хотите создать интерфейс, это использовать java bean config. Создайте метод bean, который создает конкретный класс сервиса, тип возвращаемого значения может быть интерфейсом, который реализует ваш класс сервиса. Таким образом, ваша конкретная реализация привязана только к первоначальной конфигурации bean, и вы можете легко ее изменить.

+0

Да, я также использую репозитории, к сожалению, я не могу уйти от интерфейсов (в том числе и пользовательских). Аннотации для репозиториев тоже не работают, поэтому я использую хранилища momomo

+0

Взгляните на документы здесь http://docs.spring.io/spring/docs/4.0.6.RELEASE/spring-framework-reference/htmlsingle/#beans-java в первом примере AppConfig определяет компонент MyService, где MyService будет интерфейсом, а MyServiceImpl будет конкретной реализацией. –

Смежные вопросы