spring學習筆記九

2021-10-06 16:01:03 字數 2142 閱讀 7582

為什麼要學習**模式?

因為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...