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.
Ссылки: