是在程序运行前就已经存在代理类的字节码文件,静态代理通常是对原有业务逻辑的扩充,通过让代理类持有真实对象,在代理类的源代码中调用被代理类方法来添加我们需要的业务逻辑。例如:买车不去工厂而是去4S店。
(1)创建一个接口:
interface Animal {public abstract void show();}
创建被代理类的对象,在代理类的方法中调用被代理类的方法,在这个过程中可以实现对被代理类的功能的扩充。
(3)被代理类:
public class Sheep implements Animal{@Overridepublic void show() {System.out.println("我爱吃青草");}}
(2)代理类:
public class Fish implements Animal {Sheep sheep=new Sheep();@Overridepublic void show() {sheep.show();System.out.println("我爱游泳!");}}
(4)测试类:
public class Test {public static void main(String [] args){Fish fish=new Fish();fish.show();}}
测试结果:
Sheep最爱吃青草,在他被fish类代理之后还学会了一项新的技能:游泳
(5)静态代理的缺点:
如果有多个类需要代理,那么就需要创建多个代理类分别代理目标对象,工作量较大,不利于维护,耦合度也高。
