一.静态代理
由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类 的关系在运行前就确定了。
1.满足的条件和他的弊端
1、需要知道核心类(被代理类)是哪一个类,并且有什么方法。
2、非核心的代码需要重复写多次,显得代码的结构臃肿,形成代码冗余。
3、非核心类(代理类)需要实现核心类(被代理类)实现的接口,也就是他们需要实现共同的接口,但是以核心类实现的接口(被代理类)为准。
先声明一个主题接口
package SubjectText01; public interface Subject { public void request(); }
在实现类中要重写这个方法
public class ProxySubject implements Subject {
private RealSubject realSubject;
public RealSubject getRealSubject() {
return realSubject;
}
public void setRealSubject(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
System.out.println("Before====");
realSubject.request();
System.out.println("After====");
}
}
在测试类中
@Test public void t2(){
//创建一个真实的主题对象
RealSubject realSubject=new RealSubject();
//创建一个代理主题对象
ProxySubject proxy=new ProxySubject();
//将真实对象赋值给代理对象
proxy.setRealSubject(realSubject);
proxy.request();
}