У меня было такое же чувство тьфу, ик, гадость @ImplementedBy, НО в то же время, это очень полезно.Spring должен сканировать все классы в списке пакетов, которые вы ему предоставляете.В Guice вам не нужно настраивать этот список пакетов для сканирования, и @ImplementedBy является ключевым для этого (если вы не используете Binder для привязки, которая есть).КАК он переходит к иерархии объектов на первом Injector.getInstance и попадает в интерфейс, он затем использует @ImplementedBy для поиска реализации по умолчанию (если в Binder нет ничего, переопределяющего это значение по умолчанию).
Мы также используем @ImplementedBy.Мы находим его чрезвычайно полезным в использовании, это немного фуфло, но это просто работает и работает хорошо, и, поскольку это DI, это не очень зависит от реализации, так как вы в любом случае можете переопределить привязки новыми.
В то же время интерфейсы, как правило, используются все реже с инфраструктурами DIВсе интерфейсы DAO исчезли в нашем проекте, и мы все еще можем поменять фиктивные объекты для DAO.Java-классы для начала являются неявными интерфейсами, которые могут быть смоделированы без использования интерфейса.Теперь мы оставляем использование интерфейса для основных API-интерфейсов очень понятным и не загромождаем его кодом реализации.Для ДАО нам это больше не нужно.