Sobes.tech
Назад к вопросам
Senior
5

Как Spring AOP формирует прокси? Расскажи алгоритм проксирования.

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Spring AOP формирует прокси для внедрения аспектов вокруг целевых объектов. Алгоритм примерно такой:

  1. Определение типа прокси:

    • Если целевой объект реализует хотя бы один интерфейс, Spring создаст JDK Dynamic Proxy, который проксирует интерфейсы.
    • Если интерфейсов нет, используется CGLIB для создания прокси на основе наследования от класса.
  2. Создание прокси:

    • Spring создает прокси-объект, который перехватывает вызовы методов.
    • В прокси внедряются цепочки аспектов (Advice), которые выполняются до, после или вокруг вызова метода.
  3. Вызов метода:

    • При вызове метода на прокси сначала выполняются соответствующие Advice (например, before, around).
    • Затем вызывается оригинальный метод целевого объекта.
    • После выполнения метода выполняются after Advice.

Пример создания прокси с использованием JDK Dynamic Proxy:

MyService target = new MyServiceImpl();
MyService proxy = (MyService) Proxy.newProxyInstance(
    target.getClass().getClassLoader(),
    target.getClass().getInterfaces(),
    (proxyObj, method, args) -> {
        System.out.println("Before method");
        Object result = method.invoke(target, args);
        System.out.println("After method");
        return result;
    });

В Spring это происходит автоматически через инфраструктуру AOP, которая анализирует конфигурацию аспектов и создает соответствующие прокси.