Proxy


java.lang.reflect.Proxy

Позволяет сконструировать объект во время исполнения программы (динамически), не создавая для него отдельного класса.

Note

proxy-объект можно создать только используя интерфейсы.

InvocationHandler

Функциональный интерфейс, предоставляющий метод invoke, в который направляются все вызовы, обращенные к proxy-объекту. Позволяет перехватывать все вызовы методов, обращенные к proxy-объекту.

invoke(Object proxy, Method method, Object[] args)
Создание Proxy объекта
MyInterface proxyObject = (MyInterface)Proxy.newProxyInstance(new CustomInvocationHandler());
    // Создает объект интерфейса MyInterface, адресующий все вызовы к
    //   CustomInvocationHandler.invoke(proxyObject, method, args)
    // Для получения имени вызванного метода нужно использовать method.getName()
    // method.invoke(original, args) - вызов метода у оригинального объекта
Более полный способ конструирования прокси объекта
Proxy.newProxyInstance(ClassLoader classLoader, Class<?>[] interfaces, InvocationHandler invocationHandler);
    // classLoader - the class loader to define the proxy class
    // interfaces - the list of interfaces for the proxy class to implement

Cglib

Code Generation Library - библиотека позволяющая изменять и исполнять байткод инструкции, в процессе исполнения программы. The bytecode instrumentation allows manipulating or creating classes after the compilation phase of a program.