Почему в Spring AOP объект обернут в JDK-прокси, который реализует интерфейсы?
Я изучаю весну, и у меня есть
Рассмотрим следующее определение компонента:
<bean id="clientService" class="com.myapp.service.ClientServiceImpl" />
Теперь рассмотрим случай, когда он объявленpointcut * для всех методов внутри ** clientService боб.
Учтите также, чтоClientServiceImpl учебный классреализует 3 интерфейса
Теперь я знаю, что с помощьюАОП Обслуживание клиентов bean-компонент прокси и этот прокси-сервер реализует все 3 интерфейса.
Но какова точная причина, по которой все эти 3 интерфейса реализованы?
Так что мне кажется, что существуют 2 вида прокси (поправьте меня, если я говорю неправильные утверждения):
JDK Proxy: используется по умолчанию из Spring (это правда?), в котором у меня есть интерфейс, который определяет метод объекта, который я хочу проксировать. Таким образом, конкретная реализация этого интерфейса обернута прокси. Поэтому, когда я вызываю метод для своего объекта, я вызываю его для его прокси. Вызов распознаетсяметод перехватчик которые в конечном итоге выполняют аспект, а затем выполняется вызванный метод.
CGLIB Proxy: в которой мне кажется, что прокси расширяет реализацию обернутого объекта, добавляя к нему дополнительные логические функции
Что-то вроде этого:
Поэтому мне кажется, что Spring использует первый вид прокси, который основан нареализация интерфейсов (это правильно?):
Я думаю, что вАОП дополнительная логика представлена реализациейметод перехватчик (это правда?) и стандартная логика представлена реализацией метода, определенного в интерфейсах.
Но, если предыдущие рассуждения верны, я сомневаюсь: зачем мне определять эти интерфейсы и делать, чтобы объект, обернутый объектом, реализовывал эти интерфейсы? (Я не могу понять, если прокси-сервер сам реализует эти интерфейсы).
Зачем? Как именно работает?
Tnx