java 中可以使用匿名内部类实现动态代理,通过以下步骤:1. 定义接口;2. 创建实现 invocationhandler 接口的匿名内部类;3. 使用 proxy 类创建代理对象;4. 调用代理方法。实战中,动态代理可以增强或拦截方法调用,如记录方法执行时间。

Java 匿名内部类如何实现动态代理
动态代理是一种用于在运行时创建对象代理的技术,允许在不修改目标类代码的情况下增强或拦截对象的调用。Java 中可以使用匿名内部类来实现动态代理。
1. 定义接口
立即学习“Java免费学习笔记(深入)”;
首先,定义一个接口来表示目标对象的方法:
interface Target {
void doSomething();
}2. 创建匿名内部类
要创建动态代理,可以使用匿名内部类实现 InvocationHandler 接口:
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 增强或拦截方法调用
return 1;
}
};3. 创建代理对象
接下来,使用 Proxy 类创建代理对象:
Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),
new Class[]{Target.class}, handler);4. 调用代理方法
现在可以调用代理对象上的方法,从而触发动态代理行为:
proxy.doSomething(); // 调用代理方法
实战案例
以下是一个使用匿名内部类实现动态代理的简单示例:
public class Main {
public static void main(String[] args) {
Target target = new TargetImpl();
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 增强方法调用
long startTime = System.nanoTime();
Object result = method.invoke(target, args);
long endTime = System.nanoTime();
System.out.println("方法执行时间:" + (endTime - startTime) + " 纳秒");
return result;
}
};
Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),
new Class[]{Target.class}, handler);
proxy.doSomething();
}
}
interface Target {
void doSomething();
}
class TargetImpl implements Target {
@Override
public void doSomething() {
System.out.println("原始方法执行");
}
}在此示例中,动态代理充当 Target 接口的代理,在调用原始方法之前和之后,它执行计时增强。
以上就是Java 匿名内部类如何实现动态代理?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号