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

Передаётся ли Proxy объект в качестве аргумента метода?

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

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

sobes.tech AI

Да, Proxy объект в Java может передаваться в качестве аргумента метода так же, как и любой другой объект. Proxy — это динамически созданный объект, который реализует заданные интерфейсы и перехватывает вызовы методов. При передаче Proxy в метод он ведёт себя как обычный объект, но вызовы методов будут обрабатываться через InvocationHandler, что позволяет реализовать дополнительные логики (например, логирование, проверку прав и т.п.).

Пример:

import java.lang.reflect.*;

interface Service {
    void execute();
}

class RealService implements Service {
    public void execute() {
        System.out.println("Выполнение реального сервиса");
    }
}

class ProxyHandler implements InvocationHandler {
    private final Object target;
    public ProxyHandler(Object target) {
        this.target = target;
    }
    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 {
    static void useService(Service service) {
        service.execute();
    }

    public static void main(String[] args) {
        Service real = new RealService();
        Service proxy = (Service) Proxy.newProxyInstance(
            Service.class.getClassLoader(),
            new Class<?>[]{Service.class},
            new ProxyHandler(real));

        useService(proxy); // Proxy передаётся как аргумент
    }
}