这篇文章主要讲解java的基础知识--代理。
代理其实是一种设计模式,下面的讲解是参照<<Java编程思想>>的内容。
我们先举个简单的示例来阐述什么是代理。
假如我们有一个接口Interface。
package spring3.aop.aop2; public interface Interface { public void do1(); public void do2(String str); }
我们在定义一个真实的类Target,来实现我们的接口Interface
package spring3.aop.aop2; public class Target implements Interface { @Override public void do1() { System.out.println("Target.do1()"); } @Override public void do2(String str) { System.out.println("Target.do2(" + str + ")"); } }
我们在写一个代理类Proxy,它有一个属性,来存放目标对象。
package spring3.aop.aop2; public class Proxy implements Interface { private Interface target; public Proxy(Interface target) { this.target = target; } @Override public void do1() { System.out.println(" before Target.do1()"); target.do1(); System.out.println(" after Target.do1()"); } @Override public void do2(String str) { System.out.println("before Target.do2(" + str + ")"); target.do2(str); System.out.println("before Target.do2(" + str + ")"); } }
我们来运行下,看看代理效果
package spring3.aop.aop2; public class ProxyMain { public static void main(String[] args) { Interface target = new Target(); target.do1(); target.do2("test"); Interface proxy = new Proxy(target); proxy.do1(); proxy.do2("test"); } }
结果:
Target.do1() Target.do2(test) before Target.do1() Target.do1() after Target.do1() before Target.do2(test) Target.do2(test) before Target.do2(test)
以上就是最初的代理,静态代理。
就是使用一个和被代理对象有相同接口的代理类,用户实际使用这个代理类对象来完成相应操作,而不是直接使用目标类对象。但是静态代理又弊端,需要代理一个接口,就需要创建一个代理类,增加了代码量。
怎么办呢?
等待看后续的java动态代理。自己也可以先研究下。
未完待续。。。