Reflect is a built-in object that provides methods matching all proxy traps. Example: Reflect.get(), Reflect.set(), etc.
Reflect.get(target, "name"); // "Alice"
RetryPolicy retryPolicy = new RetryPolicy(3, 100);PaymentService proxy = Reflect4.proxy(PaymentService.class) .around((proxy, method, args, target) -> Exception lastError = null; for (int i = 0; i < retryPolicy.maxAttempts(); i++) try return target.invoke(args); catch (Exception e) lastError = e; Thread.sleep(retryPolicy.delayMs()); throw new RuntimeException("Failed after retries", lastError); ) .build(); reflect4 proxy better
proxy.processPayment(amount); // automatically retries on failureReflect is a built-in object that provides methods
JDK’s InvocationHandler is method‑centric, forcing you to parse method names and arguments manually. Reflect4 provides a target‑aware, context‑rich handler: JDK’s InvocationHandler is method‑centric
Reflect4.proxy(Calculator.class)
.by((proxy, method, args, target) ->
System.out.println("Before: " + method.getName());
Object result = target.invoke(args); // invoke original
System.out.println("After: " + result);
return result;
)
.build();
The target parameter lets you invoke the original method easily, and method gives you full Method reflection access.