色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java靜態代理和動態

李華鳳1年前7瀏覽0評論

Java中的代理是一種常用的設計模式,可以在不改變原有代碼的情況下,為其添加額外的功能。

靜態代理和動態代理是代理模式中比較常見的兩種形式。

靜態代理

靜態代理是在編譯期就已經確定代理對象的類型,需要手動編寫代理類。

下面是靜態代理的一個示例:

public interface Subject {
void doSomething();
}
public class RealSubject implements Subject {
public void doSomething() {
System.out.println("RealSubject do something.");
}
}
public class ProxySubject implements Subject {
private Subject realSubject;
public ProxySubject(Subject realSubject) {
this.realSubject = realSubject;
}
public void doSomething() {
System.out.println("ProxySubject do something before");
realSubject.doSomething();
System.out.println("ProxySubject do something after");
}
public static void main(String[] args) {
Subject subject = new RealSubject();
Subject proxy = new ProxySubject(subject);
proxy.doSomething();
}
}

上面的代碼演示了一個簡單的靜態代理,其中RealSubject表示真正要被代理的對象,ProxySubject作為代理對象,代理RealSubject的行為。

動態代理

動態代理是在運行期間生成代理對象,不需要手動編寫代理類。在Java中,可以使用JDK自帶的動態代理機制實現。

下面是動態代理的一個示例:

public interface Subject {
void doSomething();
}
public class RealSubject implements Subject {
public void doSomething() {
System.out.println("RealSubject do something.");
}
}
public class ProxyHandler implements InvocationHandler {
private Subject realSubject;
public ProxyHandler(Subject realSubject) {
this.realSubject = realSubject;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("ProxySubject do something before");
Object result = method.invoke(realSubject, args);
System.out.println("ProxySubject do something after");
return result;
}
public static void main(String[] args) {
Subject subject = new RealSubject();
InvocationHandler handler = new ProxyHandler(subject);
Subject proxy = (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(),
subject.getClass().getInterfaces(),
handler);
proxy.doSomething();
}
}

上面的代碼演示了一個簡單的動態代理,其中RealSubject表示真正要被代理的對象,ProxyHandler作為代理處理器,代理RealSubject的行為。在main方法中,使用Proxy.newProxyInstance方法就可以動態生成代理對象。