Java 静态代理
静态代理通常用于对原有业务逻辑的扩充。比如持有二方包的某个类,并调用了其中的某些方法。然后出于某种原因,比如记录日志、打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里。所以可以创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象,然后在原代码中调用代理类方法,来达到添加我们需要业务逻辑的目的。
这其实也就是代理模式的一种实现,通过对真实对象的封装,来实现扩展性。
一个典型的代理模式通常有三个角色,这里称之为**代理三要素**
共同接口
public interface abstarct { public void request(); }
真实对象
public class Zsubject implements abstarct { public void request() { System.out.println("今天你学习了吗?"); } }
代理对象
public class ProxySubject implements abstarct{ private Zsubject zsubject=new Zsubject(); public Zsubject getZsubject() { return zsubject; } public void setZsubject(Zsubject zsubject) { this.zsubject = zsubject; } public void request() { System.out.println("Before==之前"); zsubject.request(); System.out.println("After==之后"); } }
运行代码
public class Test20180306 { //静态代理 @Test public void Test01(){ //真实主题 Zsubject zu=new Zsubject(); //代理主题 ProxySubject pro=new ProxySubject(); pro.setZsubject(zu); pro.request(); } }
这种代理模式也最为简单,就是通过proxy持有realObject的引用,并进行一层封装。
静态代理的优点
先看看代理模式的优点: 扩展原功能,不侵入原代码。
静态代理的缺点:
需要存在物理文件,如果有多个静态代理的话,就会有很多个物理文件