我們知道物件是交給容器來管理的那麼
init() destroy():可以在bean配置中設定物件初識化前執行和銷毀後執行
int-delay=""表示是否延遲例項化即容器例項時還是獲取bean時例項化
bean 中scope=「」 範圍屬性表示單例或多個
用來指定bean的作用域
singleton---單例 只建立乙個物件。
prototype---原型 想建立多少個就建立多少了。
request---針對web專案,不同的請求建立單獨的bean物件,同乙個請求共享乙個bean。
session---針對web專案,不同的會話建立單獨的bean物件,同乙個會話共享乙個bean。
一:採用xml注入配置
1物件注入
2類中注入物件分兩種方式
2.1set注入bean
//在類中屬性對應的物件引用需有set()方法;
//引數的位置,對應的包名類名,id
//引數如果是基本型別直接用 index='' value=""
3注入的是基本型別,將ref改為value=""
4集合注入有對應集合標籤 如set list pro map
...不同集合賦值有差異(value value pro: key entry :key /value。。。
二,採用註解注入(@resource 預設按名稱找不到按型別 @autowired 預設型別)
首先配置xml文件命名空間,以及新增標籤這樣隱式的註冊了處理分析註解的直譯器,還需新增註解包。
1.註解種模擬較jdk有支援的註解 spring 也有支援的註解,可以使用jdk不依賴框架低耦合註解@resource
2.註解可以在屬性前,也可在set方法前。可以根據型別或者名稱尋找xml中的bean.(貌似**比較簡潔了而xml配置不要再那樣去巢狀配置了)
原理(大概是:首先註解可以定義存在週期譬如執行期,可以註解標註位置譬如字段屬性上方法上,通過遍歷所有的bean,然後遍歷bean中所有屬性和方法,找到所對應的註解然後做相應的處理,再到xml檔案中尋找匹配的bean實現注入)
三 以上都屬於手動裝配另一種屬於自動裝配:(auotwire=「」 有個按型別手動裝配註解autowired有些相似)
(只需要bean 中新增屬性引數,**不需要做處理)
在bytype:按型別 找到多個丟擲異常,沒找到注入null
byname:按名稱,沒找到也是null
constructor:按構造器引數注入bean,沒找到炮異常。
autodetect:自動檢測如果是預設構造器採用bytype,引數構造器採用constructor方式。
(聽說實現同乙個介面bean會被視為同一型別不能被按型別注入待測試)
四採用自動掃瞄注入:(這種方式很好狠強大)
1.首先xml中需要新增命名空間,同時新增
將掃瞄包下類中並且有@service @repository @controller @conponent註解的類。(貌似只是一種可讀性一種分類標記,之間沒有實際不同意義)
2.預設的bean 名稱為類名首字母小寫的名稱。
3.類上同時新增註解@scope("prototype")可以修改作用域
4.在初始化方法上新增
@postconstruct
init()
@predestroy
destroy()
spring方法注入 Spring方法注入
spring方法注入 spring核心現成可用,有兩個作用域 單例和原型。單例實現單例模式,這意味著在執行時 在jvm中 只有乙個例項。spring在上下文建立期間例項化它們,將它們快取在上下文中,並在需要時 或類似的東西 從快取中提供它們。每次訪問上下文以獲取bean時都會例項化原型。當需要在單例...
spring 依賴注入 Spring依賴注入
依賴注入 dependency injection,簡稱di 與控制反轉 ioc 的含義相同控制反 在使用spring框架之後,物件的例項不再由呼叫者來建立,而是由spring容器來建立,spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直接控制,這樣控制權由應用程式轉移到了sprin...
spring依賴注入 Set注入
即建立物件時,需要的屬性等由第三方提供的依賴,也就是spring來幫你注入!public class student public void setname string name public address getaddress public void setaddress address ad...