1.jdk動態(tài)代理必須有接口
查看jdk的動態(tài)代理源碼發(fā)現(xiàn):
動態(tài)代理實際上是程序在運行中,根據(jù)被代理的接口來動態(tài)生成代理類的class文件,并加載class文件運行的過程,通過反編譯被生成的$Proxy0.class文件發(fā)現(xiàn):
? ? class類定義為:
public final class $Proxy0extendsProxyimplementsInterface {
public?$Proxy0(InvocationHandler?paramInvocationHandler)?{??
????????????super(paramInvocationHandler);??
??????????}?
????????...
...
????????// 該方法為被代理接口的業(yè)務(wù)方法,代理類都會自動生成相應(yīng)的方法,里面去執(zhí)行invocationHandler 的invoke方法。
public?final?voidsayHello(String?paramString)?{
????????????try?{??
?this.h.invoke(this,?m3,?new?Object[]?{?paramString?});??
????????????????return;??
????????????}??
????????????catch?(Error|RuntimeException?localError)?{??
????????????????throw?localError;??
? ? ? ? ? ? }??
????????????catch?(Throwable?localThrowable)?{??
????????????????throw?new?UndeclaredThrowableException(localThrowable);??
????????????}??
??????}?
????}
? ? 由于java的單繼承,動態(tài)生成的代理類已經(jīng)繼承了Proxy類的,就不能再繼承其他的類,所以只能靠實現(xiàn)被代理類的接口的形式,故JDK的動態(tài)代理必須有接口。
2.什么是解耦合什么是耦合
是指兩個或兩個以上的體系或兩種運動形式間通過相互作用而彼此影響以至聯(lián)合起來的現(xiàn)象。
解耦就是用數(shù)學(xué)方法將兩種運動分離開來處理問題。