静态代理
除cglib的代理外 被代理的类必须实现一个接口
public interface ProxyInterface {
public void say(String str);
}
//下面是真正工作的实现类
public class ProxyImpl implements ProxyInterface {
@Override
public void say(String str) {
System.out.println("ProxyImpl.say is " +str);
}
}
//下面是静态代理类
public class ProxyStatic implements ProxyInterface {
ProxyInterface proxyInterface;
public ProxyStatic(ProxyInterface proxyInterface){
this.proxyInterface = proxyInterface;
}
@Override
public void say(String str) {
System.out.println("在调用真正的方法前 执行的方法 可以用来保护真正的方法 做鉴权 限流 身份识别等");
System.out.println("经过鉴别 参数需要转换 无论入什么参数都转换为静态代理");
proxyInterface.say("静态代理");
System.out.println("搞定");
}
}
//可以看出 静态代理类与真正的实现类都是实现同一个接口 至于为啥这么搞呢 代码中说的很清楚了
//怎么用
public static void main(String[] args) {
ProxyInterface proxyInterfac = new ProxyImpl();
ProxyInterface ProxyInterface = new ProxyStatic(proxyInterfac);
ProxyInterface.say("我说啥都没用");
}
执行结果:
D:\development_tool\jdk1.8.0_181\bin\java.exe
在调用真正的方法前 执行的方法 可以用来保护真正的方法 做鉴权 限流 身份识别等
经过鉴别 参数需要转换 无论入什么参数都转换为静态代理
ProxyImpl.say is 静态代理
搞定
Process finished with exit code 0
静态代理的缺点:
- 代理类与实现类实现同一个接口 接口增加或减少方法都需要修改代理类
- 一个代理类只能代理一种接口的实现类,如果代理另一个接口,需要写新的实现类,需要代理的接口类型太多就会有太多的实现类
牢记静态代理的缺点才能更好掌握动态代理