链接:https://www.zhihu.com/question/20794107/answer/23330381
来源:代码来源于知乎回答者
静态代理是在方法级别上的代理,所以静态代理的缺点就是如果一个类的方法很多,而且都需要做静态代理的话,那么久需要创建很多的代理类,占用很大的资源那么我们可能会问:为什么不能在一个代理类里面写所有这些需要代理的方法呢?
答:如果是那样,为什么还需要代理呢,直接用委托类(原来需要被代理的类)不就行了吗
原因是这样的:因为既然一个类中的方法需要代理,那么就肯定有这个方法与其他方法的不同之处,也许是需要对这个方法上的业务做一个特殊处理,比如给这个方法增加一些功能,如果把所有需要代理的方法放到同一个代理类里面去代理,那么就会造成业务逻辑的混乱,另外一点,假如创建了该代理类的一个对象,则该对象可以同时操作代理类里面所有的被代理的方法,这样的代理类我想也是无异于原来的委托类
总之:一个方法如果需要被代理,可以肯定该方法一定有一定的原因,而且这个原因还是该方法所独有的
package test;
public interface Subject
{
public void doSomething();
}
package test;
public class RealSubject implements Subject
{
public void doSomething()
{
System.out.println( "call doSomething()" );
}
}
package test;
public class SubjectProxy implements Subject
{
Subject subimpl = new RealSubject();
public void doSomething()
{
subimpl.doSomething();
}
}
package test;
public class TestProxy
{
public static void main(String args[])
{
Subject sub = new SubjectProxy();
sub.doSomething();
}
}
我如同这个代码的作者一样,感觉代理类的创建纯属多余,一直都没有实际的业务来对比理解,现在总算明白了