為什麼要學習**模式?
因為springaop的底層就是**模式的實現,而aop則是封裝了這些功能。
**模式的分類:
我們可以看到,其實我們想要租房東的房子,但是我們並沒有直接呼叫房東的租房功能,而是通過中介,因為中介裡面封住了乙個租房方法,而這個租房方法其實是呼叫房東的方法。好處是為其他物件提供一種**以控制對這個物件的訪問
角色分析:
**模式的好處:
**步驟:
介面
package com.yu.demo01;
public
inte***ce
rent
真實角色
package com.yu.demo01;
public
class
landlord
implements
rent
}
**角色
package com.yu.demo01;
public
class
proxy
implements
rent
public
proxy()
@override
public
void
rent()
//看房
public
void
seehouse()
//。。。其他的額外行為
}
客戶
package com.yu.demo01;
public
class
client
}
缺點:
需要了解兩個類:proxy 、invokationhandler:呼叫處理程式
生成動態**:
//使用這個類,自動生成**類
public
class
proxyinvacationhandle
implements
invocationhandler
// 或更簡單地:
// foo f = (foo) proxy.newproxyinstance(foo.class.getclassloader(),
// new class> ,
// handler);
public object getproxy()
//處理**例項,返回結果
//當在**例項上呼叫方法時,方法呼叫將被編碼並分派到其呼叫處理程式的invoke方法
@override
public object invoke
(object proxy, method method, object[
] args)
throws throwable
public
void
seehouse()
}
可以看到在newproxyinstance裡面的引數(this.getclass().getclassloader(),rent.getclass().getinte***ces(), this),乙個是類載入器,決定class載入到什麼地方,乙個是產生**的介面,乙個是invacationhandle,也就是排程控制,我覺得就是控制**介面的實現類的**例項在呼叫方法時 ,方法呼叫將被編碼並分派到其呼叫處理程式的invoke方法。
method中的兩個引數都是object型別的,在jdk的文件中前乙個引數表示從底層方法被呼叫的物件,另乙個是用於方法呼叫的引數。我們可以看到此處的物件我們在前面已經設定為**介面的實現類
使用動態**:
public
static
void
main
(string[
] args)
動態**的好處: spring學習筆記(九)事務學習(上)
這段時間在工作中碰到乙個事務相關的問題。先說下這個問題的場景,我們是乙個 專案,正在開發優惠券模組,現在有乙個需求是需要批量領取優惠券,而且在領券時,其中一張領取失敗不能影響其他符合要求的券的領取。由於之前在開發時,在領券這一塊一直做的是單張領取,所以在做批量的時候很簡單的做了個迴圈,然後封裝成乙個...
spring學習筆記(九)事務學習(上)
這段時間在工作中碰到乙個事務相關的問題。先說下這個問題的場景,我們是乙個 專案,正在開發優惠券模組,現在有乙個需求是需要批量領取優惠券,而且在領券時,其中一張領取失敗不能影響其他符合要求的券的領取。由於之前在開發時,在領券這一塊一直做的是單張領取,所以在做批量的時候很簡單的做了個迴圈,然後封裝成乙個...
學習筆記(九)
字元處理只針對c n d t string型別,不做型別轉換,都按照c型別處理,也可以處理這些型別構成的結構體,有專門的字串比較 定位操作 concatenate first name last name into first name separated by separate.write fir...