目录
动态代理
JDK动态代理实现
技术:java反射
前提:代理的类实现了接口。
通过newProxyInstance()函数获得proxy对象,这个对象就代理了实现了这个接口所有的类,然后使用这个代理对象即可。 代理对象会自动调用相应的方法。比如
IRpcHelloService RpcHello = RpcProxy.create(IRpcHelloService.class);
System.out.println(RpcHello.hello("Tom老师"));
RpcHello 是 IRpcHelloService.class这个接口的代理类,IRpcHelloServiceImpl实现了这个接口,那么RpcHello.hello("Tom老师")就相当于调用了IRpcHelloServiceImpl中的hello方法。
newProxyInstance,方法有三个参数:
loader: 用哪个类加载器去加载代理对象
interfaces:动态代理类需要实现的接口
h:动态代理方法在执行时,会调用h里面的invoke方法去执行
public class ProxyHost implements InvocationHandler {
private Object target;
// 注入一个实现类
public void setTarget(Object target) {
this.target = target;
}
// 根据实现类 拿到其实现的方法
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
}
// 在使用时直接调用方法即可
// 调用时就会通过 invoke来实现
@Over

本文详细探讨了JDK和Cglib两种动态代理技术的实现方式,通过性能测试展示了在不同JDK版本下两者创建代理对象和调用方法的效率。测试结果显示,在JDK1.8中,JDK动态代理的性能优于Cglib。总结指出,虽然Cglib在大量调用时可能更快,但在JDK1.8以后的优化使得JDK代理效率提升,成为首选。
最低0.47元/天 解锁文章
2941

被折叠的 条评论
为什么被折叠?



