Sobes.tech
Back to questions
Junior — Middle
60

Каким образом можно реализовать прокси-объект для контроля доступа или добавления дополнительной логики?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

Прокси-объект в Java можно реализовать с помощью паттерна "Proxy" или динамических прокси, чтобы контролировать доступ или добавить дополнительную логику при вызове методов.

Пример с использованием динамического прокси:

import java.lang.reflect.*;

interface Service {
    void perform();
}

class RealService implements Service {
    public void perform() {
        System.out.println("Выполнение основной логики");
    }
}

class ProxyHandler implements InvocationHandler {
    private final Object realObject;

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

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Проверка доступа перед вызовом метода");
        Object result = method.invoke(realObject, args);
        System.out.println("Дополнительная логика после вызова метода");
        return result;
    }
}

public class ProxyExample {
    public static void main(String[] args) {
        Service realService = new RealService();
        Service proxyInstance = (Service) Proxy.newProxyInstance(
            Service.class.getClassLoader(),
            new Class[]{Service.class},
            new ProxyHandler(realService));

        proxyInstance.perform();
    }
}

Такой прокси позволяет перехватывать вызовы методов, добавлять проверки или логику до и после вызова реального объекта.