一、介绍
代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
根据代理类的生成时间不同可以将代理分为静态代理和动态代理两种。
静态代理即为JDK原生静态代理。
而动态代理方式又可以分为两种:
1. JDK原生动态代理
2. CGLIB动态代理。
静态代理的对象在编译时生成,而动态代理的对象只在程序运行时生成,因此静态代理的类会产生对应的字节码文件,动态代理则不然。
二、静态代理
这种代理方式需要代理对象和目标对象实现一样的接口。
优点:
可以在不修改目标对象的前提下扩展目标对象的功能。
缺点:
1. 冗余。会产生过多的代理类。
2. 不易维护。随着接口增加方法,目标对象与代理对象都要进行相应修改。
// 接口interfaceHello{
StringsayHello(String str);
}// 实现classHelloImpimplementsHello{
@Override publicStringsayHello(String str){
return "HelloImp: " + str;
}
}