spring擴充套件的常用介面

2021-09-08 13:21:09 字數 3947 閱讀 1174

然後持有spring上下文物件,可以通過該物件獲取spring容器中註冊的任何bean例項。

/**

* @author administrator

* spring上下文物件,可以在程式中持有乙個context的物件,通過context,我們可以獲取任何

* spring容器管理的bean

*/ @override }

return context; }

/*** 通過beanname獲取例項bean

* @param beanname

* @return

*/@suppresswarnings("unchecked")

public static t getbean(string beanname)

/*** 通過型別獲取例項bean,但是如果在spring容器中通過相同的類

* 的不同構造器建立兩個不同的物件,通過型別則獲取不到物件

* @param clazz

* @return

*/@suppresswarnings("unchecked")

public static t getbean(class<?> clazz)

}

測試兩種獲取例項bean的方式:

@test

system.out.println(emp);

system.out.println(emp2);

}

emp [name=null, age=null, salary=null]

emp [name=null, age=null, salary=null]

可以獲取物件,但是如果xml中註冊兩個相同型別的bean,就會出問題:

spring容器啟動的時候才會將該物件註冊,當檢測到該類實現該介面時,會把spring上下文物件注入。

下面看一下介面原始碼:

extends aware

aware介面:

public inte***ce aware

空介面,就是乙個標記

二:initializingbean介面

實現該介面的類,需要重寫 afterpropertiesset() ,在例項化的時候,呼叫完構造方法建立物件之後,會呼叫

該方法執行乙個初始化bean的動作,作用類似@postcontrcut註解和xml中配置的init-method屬性,但是執行順序

有區別

/**

* @author administrator

* 員工emp類,實現initializingbean介面,重寫afterpropertiesset方法,還有註解@postconstruct,同時還有

* 在例項化emp的時候,配置了init-method="init"屬性

*/public class emp implements initializingbean

@override

public void afterpropertiesset() throws exception

@postconstruct

public void reload()

public void init()

public string getname()

public void setname(string name)

public integer getage()

public void setage(integer age)

public double getsalary()

public void setsalary(double salary)

@override

public string tostring()

}

spring容器xml中配置:

的作用是掃瞄註解到spring容器,但是它的作用有限制,不能用作掃瞄service,controller,component等

元件註冊到spring,例如:它的作用是掃瞄元件,包括上面的配置。

執行結果如下:

constructor...

@postconstruct

initializingbean...afterpropertiesset

method-init

constructor...

@postconstruct

initializingbean...afterpropertiesset

首先執行第一條:

1:執行構造器,建立物件

2:建立物件之後,呼叫有@postcontruct註解的方法初始化bean物件

3:呼叫afterproptertiesseet方法初始化物件

4:呼叫xml中配置的init-method方法初始化物件

執行第2條語句:

1:執行構造器,建立物件

2:建立物件之後,呼叫有@postcontruct註解的方法初始化bean物件

3:呼叫afterproptertiesseet方法初始化物件

這裡建立完物件之後,有乙個set注入的過程,會呼叫emp類中的set*方法,對物件進行初始化,然後

在呼叫2,3步驟。

假如把emp物件中set方法注釋,那麼第2條語句執行完建立物件之後,就會停止。

三:注入list《介面》 物件

如果在乙個類裡面需要依賴多個bean物件時,可以通過實現介面的方式,將所有的bean注入,方式如下:

/**

* @author administrator

* ibusinessservice介面是乙個空介面,作為乙個標記

*/public inte***ce ibusinessservice

/**

* @author administrator

* */

@component

public class abusinessserviceimpl implements ibusinessservice

}

@component

public class bbusinessserviceimpl implements ibusinessservice

}

@component

public class cbusinessserviceimpl implements ibusinessservice

}

在*handler類中依賴上面3個類

@component

public class businessservicehandler

}}

測試注入效果:

@test

bhandler.handler();

}

abusinessserviceimpl...

bbusinessserviceimpl...

cbusinessserviceimpl...

執行成功!

Spring擴充套件點之Aware介面族

這些aware的作用都可以從命名得知 aware的處理 其中beannameaware beanclassloaderaware和beanfactoryaware這三個是直接在bean的初始化之前就處理了的,具體 在abstractautowirecapablebeanfactory.initial...

spring 擴充套件

beanfactorypostprocessor 介面 物件例項化之前 1.實現 beandefinitionregistrypostprocessor介面 2.實現 beanfactorypostprocessor 介面 beanpostprocessor介面 建立時還沒建立,返回 物件 3.實現...

介面擴充套件筆記

一 介面分類 廣泛分類 外部介面及內部介面 按照不同的協議分為 http,webservers,dubbo,socket等 二 比較常見的狀態碼 200 客戶端請求成功。301 頁面重定向。302 臨時重定向。304 靜態資源不請空時,第二次登陸時會從本地獲取。401 沒有授權。403 禁止,無許可...