Почему в 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

Ответы на вопрос(1)

Ваш ответ на вопрос