看到很多介绍Java动态代理的文章上来就是一大推动态代理的例子和源码,让我们这些菜鸡情何以堪。。。研究了一天,简单的看了下源码,把自己的一些理解记下来。
动态代理听起来很高大上,其实也只是一种代理的实现方式,与之相对的还有一种静态代理。首先来聊一聊“代理”这个东西。代理作为一种经典的设计模式,应用灰常广泛,举个实际栗子:
如上图所示,厂商委托微商帮它卖东西,买家从微商这里买东西,而且一般情况下买家是不知道背后是哪个厂商(所以才会有辣么多假货)。微商有点像厂商提供对外的“接口”,买家想要拿到里面的商品必须要通过微商(厂家直供什么的除外)。如此,厂商(被代理类)就可以在不调整公司部门结构(类的实现)的情况下,通过微商(代理类)为买家(一般为方法调用)提供服务渠道,更重要的是微商在把商品卖给买家 之前和之后还可以做一些不可描述的事情。。。综合以上描述,我们可以知道代理具备以下两个优点:
- 可以隐藏被代理类的实现细节;
- 实现调用方和被代理类之间的解耦,在不修改被代理类的基础上增加额外的处理。
作为一个程序猿,还是看代码来的痛快一点,下面来一段炒鸡简单的静态代理的栗子。显示定义两个接口类:
package blog.xu;
public interface Goods1 {
public void produce1();
}
package blog.xu;
public interface Goods2 {
public void produce2();
}
被代理类:
package blog.xu;
public class Manufacturer implements Goods1,Goods2{
@Override
public void produce1() {
System.out.println("商品1");
}
@Override
public void