然後持有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 禁止,無許可...