JDK的动态代理

本文通过实例演示了如何使用JDK动态代理实现AOP思想。首先定义了一个接口Subject及其实现类RealSubject,接着创建了一个实现了InvocationHandler接口的类MyInvokeHandler来生成动态代理对象,并在main方法中进行了测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态代理可以帮助我们理解AOP思想,所以就想着自己动手写一写JDK动态的实现。

 

 

首先一个接口

/**
 *  需要代理的类和代理的接口
 * @ClassName Subject
 * @Description
 * @author wp
 *
 */
public interface Subject {
	public void active();
}

需要被代理的类

/**
 * 实体类
 * @ClassName RealSubject
 * @Description
 * @author wp
 *
 */
public class RealSubject implements Subject{
	public void active() {
		System.out.println("实体类");
	}
}

然后JDK动态代理需要实现一个InvocationHandler的接口

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

/**
 * 实现动态代理的类
 * @ClassName MyInvokeHandler
 * @Description
 * @author wp
 *
 */
public class MyInvokeHandler implements InvocationHandler{

	private Subject sub;
	public MyInvokeHandler(Subject sub) {
		this.sub = sub;
	}
	
	public Object getProxy() {
		return Proxy.newProxyInstance(sub.getClass().getClassLoader(), sub.getClass().getInterfaces(), this);
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object Obj = method.invoke(sub, args);
		return Obj;
	}

}

getProxy()方法可以获得代理对象,invoke(Object proxy, Method method, Object[] args)方法则可以调用具体方法,原理是java的反射机制。

最后一个测试的main方法

public class ProxyTest {

	public static void main(String[] args) {
		Subject real = new RealSubject();
		MyInvokeHandler my = new MyInvokeHandler(real);
		Subject proxy = (Subject) my.getProxy();
		proxy.active();
	}
}

得到代理对象后,就可以通过代理对象调用接口中方法实现代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值