Java中的靜態代理是一種代理模式,在某個類或對象的外部代理另一個類或對象的行為。靜態代理在編譯期間就被確定下來,不會改變代理類的行為。對于一些固定的代理需求,靜態代理是非常有用的。
靜態代理主要包含兩個實體類,代理類和委托類。代理類和委托類都要實現相同的接口。代理類通過內部創建委托類的對象來實現相同的接口,因此代理類可以調用委托類的方法。
// 接口類 public interface IHello { void sayHello(); } // 委托類 public class Hello implements IHello { @Override public void sayHello() { System.out.println("Hello, World!"); } } // 代理類 public class HelloProxy implements IHello { private IHello hello; public HelloProxy(){ hello = new Hello(); } @Override public void sayHello() { System.out.println("Before Hello"); hello.sayHello(); System.out.println("After Hello"); } } // 調用代理 public class Main { public static void main(String[] args) { IHello hello = new HelloProxy(); hello.sayHello(); } }
如上例所示,代理類HelloProxy實現了接口IHello,通過內部創建委托類Hello的對象hello,實現相同的接口。在調用代理類的sayHello()方法時,先執行打印“Before Hello”的代碼,然后調用hello對象的sayHello()方法,最后執行打印“After Hello”的代碼。