Sobes.tech
Назад к вопросам
Junior — Middle
68

Можно ли реализовать прокси-объект для обычного класса без применения средств фреймворка Spring?

Компании, где спрашивали
AstonAston

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

sobes.tech AI

Да, прокси-объект для обычного класса можно реализовать без Spring, используя стандартные средства Java. Например, можно применить динамические прокси через java.lang.reflect.Proxy для интерфейсов или библиотеку CGLIB для проксирования классов без интерфейсов.

Пример динамического прокси для интерфейса:

import java.lang.reflect.*;

interface Service {
    void execute();
}

class ServiceImpl implements Service {
    public void execute() {
        System.out.println("Выполнение метода execute");
    }
}

class ProxyHandler implements InvocationHandler {
    private final Object target;

    public ProxyHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Перед вызовом метода");
        Object result = method.invoke(target, args);
        System.out.println("После вызова метода");
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        Service original = new ServiceImpl();
        Service proxy = (Service) Proxy.newProxyInstance(
            Service.class.getClassLoader(),
            new Class[]{Service.class},
            new ProxyHandler(original)
        );

        proxy.execute();
    }
}

Если класс не реализует интерфейс, можно использовать CGLIB для создания прокси на основе наследования.