⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

反射与动态代理:运行时生成代理对象

Java 动态代理通过 InvocationHandler 接口和 Proxy 类,在运行时创建实现指定接口的代理实例,用于 AOP、日志等。 · 难度:入门 · +15XP

反射与动态代理:运行时生成代理对象

java.lang.reflect.Proxy 配合 InvocationHandler 可以为一组接口创建动态代理实例。调用代理对象的方法时,会转发到 InvocationHandler 的 invoke 方法,你可以在其中添加额外逻辑(如日志、权限检查)后再调用真实对象的方法。动态代理要求目标对象必须实现接口。下面示例为 UserService 接口创建代理,在方法调用前后打印日志。

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface UserService { void login(String username); }

class UserServiceImpl implements UserService { public void login(String username) { System.out.println("用户 " + username + " 登录成功"); } }

public class DynamicProxyDemo { public static void main(String[] args) { UserService realService = new UserServiceImpl(); UserService proxy = (UserService) Proxy.newProxyInstance( realService.getClass().getClassLoader(), realService.getClass().getInterfaces(), (Object proxyObj, Method method, Object[] args1) -> { System.out.println("[日志] 调用方法: " + method.getName()); Object result = method.invoke(realService, args1); System.out.println("[日志] 方法结束"); return result; }); proxy.login("Alice"); } }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 133 篇
0 完成
🔥 0