spring aop的一些侷限性。

2021-05-27 23:38:18 字數 638 閱讀 4426

spring的aop還是蠻好用的。尤其是基於annotation的pointcut,定義乙個annotation,再在配置檔案裡配置一下,就搞定了。

但spring的aop還是有一些侷限性的。

1.只能用在spring容器管理的類上面進行aop,對不是spring例項化的物件就無能為力了。

2.切入點只能在方法級別,不過這對絕大多數應用場景也足夠了。

3.只有外部類對這個方法的呼叫aop才會生效,同乙個類裡的內部呼叫是不會有aop的。

對於第三點,剛開始想不通,後來看了spring的原始碼才搞清楚。

spring是利用生成**類的形式來實現aop的。

對於介面,優先採用jdk的動態**,也需要例項化乙個沒有**前的原始類。

處理的時候是這個動態**類呼叫原始類的對應方法是實現的。所以對原始類裡面的方法之間的呼叫是沒有進行aop處理的。

對於類的**是用cglib實現的。cglib生成的**類雖然成了原始類的乙個子類,但處理邏輯還是呼叫原始類進行的,

也就是說spring要完成乙個類的aop化,需要呼叫兩次原始類的建構函式。

首先要例項化原始類的時候要呼叫一下建構函式,同時cglib生成的類例項化的時候也要呼叫原始類的建構函式。

不知道spring為什麼要這樣設計,感覺不是很合理。

SQLite的侷限性

sql 92特性方面 正如前面提到的,sqlite不支援sql 92的在很多企業資料庫系統中可用的一些特性。如 外來鍵約束 可解析的,但非強制 很多alter table特性 一些trigger相關的特性 right和full outer join 更新乙個view grant和revoke 你可以...

SQLite的侷限性

sqlite和其他大部分現代sql資料庫在基本設計目標上是不同的,它的目標是簡單。sqlite遵循這一目標,即使這樣偶爾會導致某些特性實現的低效化。下面列舉了sqlite的一些缺陷 sql 92特性方面 正如前面提到的,sqlite不支援sql 92的在很多企業資料庫系統中可用的一些特性。如 外來鍵...

AutoPtr 的侷限性

因為std auto ptr是轉移語義,而stl容器的元素必須是值語義,也就是拷貝語義的。比如,stl容器都是以副本的形式來儲存元素。std vectorv int a 1 v.push back a v 0 也是值為1的int,但不是a.僅僅是乙個副本.a的值也並未被改變.std auto ptr...