Reflect 4 Proxy Access

public class RealUserService implements UserService @Override public String getUserName(int userId) return "User_" + userId; @Override public void updateUser(int userId, String newName) System.out.println("Updated user " + userId + " to " + newName);

@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable // Log before execution System.out.println("[LOG] Calling: " + method.getName()); if (args != null) for (int i = 0; i < args.length; i++) System.out.println("[LOG] Arg " + i + ": " + args[i]); // Invoke the real method via reflection Object result = method.invoke(target, args); // Log after execution System.out.println("[LOG] Returned: " + result); return result;

UserService proxy = (UserService) Proxy.newProxyInstance( UserService.class.getClassLoader(), new Class[]UserService.class, new LoggingHandler(realService) ); // Call methods via proxy String name = proxy.getUserName(42); proxy.updateUser(42, "John Doe"); reflect 4 proxy

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class LoggingHandler implements InvocationHandler private final Object target; // real object

public interface InvocationHandler public Object invoke(Object proxy, Method method, Object[] args) throws Throwable; @Override public void updateUser(int userId

| Feature | JDK Proxy | CGLIB | Byte Buddy | |---------|-----------|-------|-------------| | | Interfaces only | Concrete classes | Both | | Implementation | Reflection | Subclassing (bytecode) | Bytecode generation | | Performance | Medium | High | Highest | | Complexity | Low | Medium | High | | Modern use | Spring AOP (default) | Spring (fallback) | Mocking frameworks |

public LoggingHandler(Object target) this.target = target; @Override public Object invoke(Object proxy

Whether you are building aspect-oriented programming (AOP) frameworks, mocking libraries (like Mockito), or intercepting method calls for logging and security, the reflect 4 proxy mechanism is your gateway to runtime metaprogramming.