最近项目有个需求,要用到动态代理调用远程接口,本地不实现接口,然后就学习了一下该设计模式并记录下来。
我自己的理解。
代理:不提供对对象的直接引用,通过代理的方式对目标对象进行调用。我认为,目前最大的用处在于不改变原有实现类的源代码的情况下,扩展类,增加需求。比如,我的需求是这样的,我要增加对某个类的访问权限,而这个访问权限是针对某些类限定的,那么我就不能去直接更改这个目标类的源代码,因为一旦我再目标类里修改了源代码,那就意味着 所有访问此类的都要经过此权限校验,这与需求不符。那么我就可以使用代理,在需要调用此目标类的调用出使用代理类,在代理类中增加我们的权限验证,这样就需要修改原目标类的代码,又实现了功能。这只是我简单列举的其中一个例子,还有很多应用场景,比如 添加日志 等等
代理又分静态代理和动态代理
静态代理:针对每个需要被代理的类写一个代理类。缺点是:代理类和被代理类都要实现同一个接口或抽象类,并且,如果需要代理的类有很多的话,那么就需要写很多的代理类,因此,动态代理应运而生。
一、静态代理简单demo
1.公共接口(抽象类也行)
public interface UserService {
String getName(int id);
Integer getAge(int id);
}
2.实现类