效果
⛽静态代理的优缺点
缺点: 不利于扩展,调用一次就要创建一次对象,从而造成不必要的内存空间浪费
优点: 可读性好,逻辑简单,清晰明了
动态代理又分为:JDK动态代理、CGLIB动态代理
在程序运行时,运用反射机制动态创建而成,达到调用服务
使用以上的Subject类和实现类
SubjectInvocationHandler处理器类
package com.wanshi.netty.dubborpc.netty;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class SubjectInvocationHandler implements InvocationHandler {
private Object obj;
public SubjectInvocationHandler(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object res = method.invoke(obj, args);
return res;
}
}
ProxyFactry工厂类
package com.wanshi.netty.dubborpc.netty;
import java.lang.reflect.Proxy;
public class ProxyFactry {
public static Subject getInstance() {
SubjectImpl subject = new SubjectImpl();
System.out.println(“美团外卖,使命必达,跑腿代买!”);
SubjectInvocationHandler subjectInvocationHandler = new SubjectInvocationHandler(subject);
Subject proxy = (Subject) Proxy.newProxyInstance(subject.getClass().getClassLoader(),
subject.getClass().getInterfaces(), subjectInvocationHandler);
return proxy;
}
}
测试类
public static void main(String[] args) {
Subject subject = ProxyFactry.getInstance();
String buy = subject.buy(“饮料”);
System.out.println(buy);
}
效果
⛽动态代理的优缺点
两种动态代理对照表
| | JDK原生动态代理 | CGLIB动态代理 |
| — | — | — |
| 核心原理 | 基于 ”接口实现“方式 | 基于类集成方式 |
| 优点 | Java原生支持的,不需要任何依赖 | 对与代理的目标对象无限制,无需实现接口 |
| 不足之处 | 只能基于接口实现 | 无法处理final方法 |
| 实现方式 | Java原生支持 | 需要引入Jar文件依赖 |
====================================================================================
-
dubbo 底层使用了Netty作为网络通讯框架,要求用Netty实现一个简单的RPC框架
-
模仿dubbo,消费者和提供者约定接口和协议,消费者远程