Мне нужен совет, в каких сценариях динамический прокси окажется более полезным, чем обычный прокси.
Я приложил много усилий, чтобы научиться эффективно использовать динамические прокси. В этом вопросе отметим, что такие фреймворки, как AspectJ, могут выполнять практически все, что мы пытаемся достичь с помощью динамических прокси, или что, например, CGLIB может использоваться для устранения некоторых недостатков динамических прокси.
Остальные?
public Object invoke(Object target, Method method, Object[] arguments) {
System.out.println("before method " + method.getName());
return method.invoke(obj, args);
}
}
Шаблон декоратора определенно полезен, поскольку он разрешает побочные эффекты для всех методов прокси (хотя это поведение является книжным примером использования аспектов .. ).
public Object invoke(Object target, Method method, Object[] arguments) {
if ("getValues".equals(method.getName()) {
// check or transform parameters and/or return types, e.g.,
return RangeUtils.validateResponse( method.invoke(obj, args) );
}
if ("getVersion".equals(method.getName()) {
// another example with no delegation
return 3;
}
}
контракт, с другой стороны, дает преимущество только в том, что исключает необходимость реализации полного интерфейса. Затем снова, рефакторинг проксированных методов молча аннулирует динамический прокси.
Итак, я вижу здесь один реальный вариант использования и один сомнительный вариант использования. Каково ваше мнение?