MyBatis學習筆記 外掛程式機制(AOP)

2021-08-27 03:56:42 字數 3114 閱讀 8090

mybatis所述的外掛程式功能,其實就是乙個***功能。

1、在四大物件建立的時候,每個建立出來的物件不是直接返回的,而是通過interceptorchain.pluginall(parameterhandler)返回的。

2、pluginall獲取到所有的interceptor(***)(外掛程式需要實現的介面),呼叫interceptor.pluginall(target),返回target被包裝後的物件

3、外掛程式機制:我們可以使用外掛程式為目標物件建立乙個**物件:aop(面向切面)

我們的外掛程式可以為四大物件建立出**物件**物件就可以攔截四大物件的每乙個執行(方法)

public object pluginall(object target) 

return target;

}

實現自定義外掛程式,需要實現org.apache.ibatis.plugin.interceptor介面。

/**

* 完成外掛程式簽名:

* 告訴mybatis當前外掛程式用來攔截哪個物件的哪個方法

*/@intercepts()

public

class

myfirstplugin

implements

interceptor

/**

* plugin:

* 包裝目標物件:包裝,為目標物件建立乙個**物件

*/@override

public object plugin(object target)

/*** setproperties:

* 將外掛程式註冊時的property屬性設定進來

* */

@override

public

void

setproperties(properties properties)

}

注釋,介面裡面共有三個方法。

(1)intercept方法:

攔截目標方法,在其前後都可以進行業務邏輯,使用invocation.proceed();執行方法。

(2)plugin方法:

包裝target目標為**物件,可以自己寫建立**物件的邏輯,也可以使用mybatis提供的快捷方式去建立**物件object wrap = plugin.wrap(target, this);,第二個this就是當前的***。

(3)setproperties方法:

在全域性配置檔案註冊外掛程式時,可以設定一些property屬性,通過該方法的入參獲取。

如以下的全域性配置檔案,設定了兩個property,可以通過入參獲取到:

interceptor="com.shen.mybaties.dao.myfirstplugin">

name="username"

value="root" />

name="password"

value="123456" />

plugin>

plugins>

光實現介面還不行,因為沒有指定攔截哪乙個類,攔截哪乙個方法

需要在外掛程式類上加乙個@intercepts,它有三個屬性

(1)type:類型別,就是some.class

(2)method:需要攔截的方法名

(3)args:由於可能存在方法過載,故需要通過引數型別來確定攔截的方法,同樣是類型別(.class

全域性配置檔案加入如下配置:

interceptor="com.shen.mybaties.dao.myfirstplugin">

name="username"

value="root" />

name="password"

value="123456" />

plugin>

plugins>

configuration>

在plugin方法中,我們使用mybatis提供的快捷方法plugin.wrap(target, this);,可以快速得到乙個**物件。

plugin產生的**物件,其中target才是真正的物件。

模仿first外掛程式。

多個外掛程式包裝物件時,每次都進行一次包裝,第二次傳入的target為第一次包裝的**物件,造成一層包一層的情況。

建立動態**的時候,是按照外掛程式配置順序建立層層**的物件。

執行目標方法的時候,按照逆向順序執行。

外掛程式開發,主要需要知道被**物件有哪些屬性,如修改查詢引數。

@override

public object intercept(invocation invocation) throws throwable

這裡,需要知道被**物件,有乙個屬性為parameterhandler,屬性的屬性parameterobject是控制引數預編譯的引數,我們需要修改這個。

使用mybatis提供的systemmetaobjectgetvaluesetvalue方法進行修改,達到目的。

DISCUZ 外掛程式機制

1 參考 2 由第一點中的官方提供的參考庫可以基本可以了解怎麼去開發乙個外掛程式。這裡簡述幾點重要的 一 配置檔案中config global.php中加上 config plugindeveloper 1 就可以在後台 應用 外掛程式 中設計新外掛程式。將上述變數中的值設定成為2,就可以看disc...

jQuery 外掛程式機制

簡介 利用jquery提供的 fn.extend 和 extend 方法,擴充套件 extend 擴充套件jquery的類方法 作用 1.合併物件 var a var b 後面加到前面,屬性相同的後面覆蓋前面的屬性 console.log extend a,b 2.擴充套件jquery類方法 var...

jQuery外掛程式機制

為了擴充套件jquery庫函式,jquery提供了兩種方式 jquery.extend object 擴充套件jquery物件本身,主要是用來擴充套件jquery全域性函式 呼叫時直接 函式名 引數 如下例子 jquery.fn.extend object 擴充套件 jquery 元素集,主要用於擴...