使用 J多媒体a 动态业务伙伴 API J多媒体a 动态协同伙伴 API 允许在运行时创建合作伙伴类,该合作伙伴类可以拦截对目标对象的调用并执行自定义逻辑。 步骤: 创建目标类: ```j视频a interface Target { void doSomething(); } class RealTarget implements Target { @Override public void doSomething() { System.out.println("RealTarget: doSomething"); } } ``` 创建 InvocationHandler: InvocationHandler 是一个接口,定义了协同伙伴类对方法调用的处理方式。 ```j视频a class LoggingInvocationHandler implements InvocationHandler { private final Target target; public LoggingInvocationHandler(Target target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("LoggingInvocationHandler: before " + method.getName()); Object result = method.invoke(target, args); System.out.println("LoggingInvocationHandler: after " + method.getName()); return result; } } ``` 创建协同伙伴类: ```j影音a Target target = new RealTarget(); InvocationHandler handler = new LoggingInvocationHandler(target); Target proxy = (Target) Proxy.newProxyInstance( target.getClass().getClassLoader(), new Class[] { Target.class }, handler); ``` 4. 使用协同伙伴类: ```j影音a proxy.doSomething(); ``` 输出: ``` LoggingInvocationHandler: before doSomething RealTarget: doSomething LoggingInvocationHandler: after doSomething ``` 其他注释: `Proxy.newProxyInstance()` 方法返回一个实现给定接口的新合作伙伴实例。 合作伙伴类是基于反射实现的,这意味着它的效率可能低于直接调用目标类。 动态业务伙伴在调试、日志记录和安全等场景中很有用。