Это очень спорный вопрос. Короче говоря, нет ничего - по крайней мере, для вас, разработчика.
В мире EJB2 интерфейсы Home и Remote были необходимостью, и именно поэтому @AravindA упоминает: прокси. Безопасность, удаленное взаимодействие, объединение в пул и т. Д. Могут быть помещены в прокси-сервер и предоставлять услуги, запрошенные строго в стандартной библиотеке (как в DynamicProxy
).
Теперь, когда у нас есть javaassist
и cglib
, Spring (Hibernate, EJB3, если вы предпочитаете) вполне способны использовать ваши классы как разработчики фреймворков. Проблема в том, что они делают очень раздражающую вещь: они обычно просят вас добавить конструктор без параметров. - Подождите, у меня здесь есть параметры? - Не важно, просто добавьте конструктор.
Итак, здесь есть интерфейсы для поддержания вашего здравомыслия. Тем не менее, это странно, конструктор без аргументов для класса с правильным конструктором - это не то, что имеет смысл для меня, верно? Оказывается (я должен был прочитать спецификацию, я знаю), что Spring создает функциональный эквивалент интерфейса из вашего класса: экземпляр без (или игнорируемого) состояния и все переопределенные методы. Таким образом, у вас есть «настоящий» экземпляр и «поддельный интерфейс», и то, что делает поддельный интерфейс, это то, что он служит для вас магией безопасности / транзакций / удаленного взаимодействия. Хорошо, но трудно понять, и выглядит как ошибка, если вы не разобрали ее.
Более того, если вам случится реализовать интерфейс в своем классе, (по крайней мере, в некоторых версиях) Spring вдруг решит, что вы собираетесь использовать прокси только для этого интерфейса, и приложение просто не работает без видимой причины.
Таким образом, пока причина в безопасности и здравомыслии. Есть причины, почему это хорошая практика, но из вашего поста, я вижу, вы уже прочитали все это. Наиболее важной причиной, которую я вижу сегодня, является показатель WTH / минута, особенно если мы говорим о новичках в вашем проекте.