作用域可以分為:singleton,prototype,request,session。
bean的生命週期可以分為定義,初始化,使用和銷毀四個階段。而定義一般在xml檔案中配置完成。
bean的初始化操作可以採用兩種方法進行,一種是在xml配置檔案中設定「init-method」引數的值為對應bean中的初始化方法的名稱;另一種是在不配置xml檔案的情況下,讓對應的bean實現initializingbean介面,並且在bean中覆蓋具體的afterpropertiesset()
方法。
bean的銷毀操作同樣可以用兩種方法設定。一是配置「destroy-method」引數;二是實現disposablebean藉口,並覆蓋destroy()
方法。
需要注意的是,無論初始化還是銷毀操作,實現介面的方法將會優先於xml配置引數的方法進行。
另一方面,還可以通過在配置預設的初始化和銷毀方法
default-init-method
和default-destory-method
進行設定,然後在具體bean中實現對應方法即可。注意,預設初始化方法和銷毀方法可以被前兩種bean的初始化、銷毀方法覆蓋,也可以不用實現。但是前兩種bean方法配置後就必須要實現,否則報錯。
在spring中,可以採用自動裝配的方式進行bean內部私有類的自動裝配。具體的方式是對xml檔案中的beans資訊進行配置。欄位為default-autowire
,值為byname
,bytype
,constructor
三種。
byname是通過bean的id進行匹配注入的,即對於私有類的set方法,其接受引數的名稱要和xml檔案內bean的名稱相同,否則無法自動裝配。
bytype也是通過set方法進行自動裝配,不過其是通過set方法接受引數的型別,去xml檔案中進行尋找,因此即使xml檔案中沒有bean的id,也可以自動裝配。
constructor是通過構造器方法進行自動裝配的,其搜尋方式同bytype一樣,也是通過bean的型別進行尋找。
spring也可以利用註解的形式來代替配置xml檔案。
對於原先使用xml配置bean的id,類的型別以及作用域的情況,現在可以採用的是註解的形式。@component
註解為基礎註解,可以註解任意bean型別。@service
,@repository
,@controller
註解和component註解一樣,不過更具針對性.這四個註解都是用於對bean的定義,並且可以採用形如@component("beanid")
的形式進行重新配置bean的id.
作用域的註解為@scope
,預設採用的是singleton模式,也可以自己配置為prototype等模式.
值得注意的是,當使用註解的時候,需要在xml裡面新增上掃瞄範圍,如
如果bean中的私有類有set方法,則可以在set方法上使用@required
註解進行自動裝配.不過,更常用的是使用@autowired
註解,該註解不僅可以註解在set方法上,也可以直接註解在私有變數或者構造器方法上.並且,通過採用配置@autowired(required = false)
的形式,可以使得找不到注入bean時可以不報錯.
當被標記@autowired
的 私有類是乙個介面,且有多個實現類時,可以同時新增@qualifier("子類id")
來限定裝配哪個子類.
@autowired
還可以用來裝配set和map,當集合其中的拓展型別是介面或者父類時,便會將其子類都裝配進去.
除了@autowired
註解,也可以使用@resource
註解.@resource
的裝配順序:@resource後面沒有任何內容,預設通過name屬性去匹配bean,找不到再按type去匹配
指定了name或者type則根據指定的型別去匹配bean
指定了name和type則根據指定的name和type去匹配bean,任何乙個不匹配都將報錯
然後,區分一下@autowired和@resource兩個註解的區別:
@autowired
預設按照bytype方式進行bean匹配,@resource
預設按照byname方式進行bean匹配
@autowired
是spring的註解,@resource
是j2ee的註解,這個看一下匯入註解的時候這兩個註解的包名就一清二楚了.----
@bean
可以用來注釋在方法上,等價於在xml中配置bean.
@bean 標記在方法之上,方法的返回值為向springioc容器之中注入乙個bean.一般其中,返回值相當於xml檔案bean標籤的class屬性,方法的名稱相當於id屬性.
我們的property屬性被放置在了方法的實現之中.
@bean註解有乙個屬性,name屬性,可以幫助我們指定bean的id的名字.
@bean
會和@configuration
一起搭配使用,@configuration
用在類之上,表明該類是乙個配置類,作用等價於xml配置檔案.
@importresource
和@value
是配合使用的,可以搭配@configuration
和@bean
一起進行將類轉化為配置類,並進行配置.其中,@importresource("classpath:/路徑")
用於設定鍵值對檔案的路徑,value採用@value($)
的方式進行呼叫賦值.
類似的,在註解體系中,也有@postconstruct
和@predestroy
註解可以用於bean的啟動和登出方法上.
Spring中Bean的配置
以下面的xml檔案舉例 第乙個bean的名稱為role,第二個bean的名稱為medicine,第三個bean的名稱為spring.chapter.mary.poison,第四個bean的名稱為spring.chapter.mary.poison 1 id和name的區別如下 id屬性具有唯一性,每...
配置Spring Ioc中的bean
設值方法注入屬性,可使用元素,也可以使用元素,但是此元素沒有name屬性 list map set 可以指定任意型別 typea type properties與map類似,但是properties集合的關鍵字和值始終是字串。需要使用標記,以多個標記作為子專案,每個標記必須定義乙個key屬性幷包含對...
Spring中Bean的配置
可以把spring看做乙個大型的工廠,而spring容器中的bean就是該工廠的產品。要想使用這個工廠生產和管理bean,就需要在配置檔案中告訴它需要哪些bean,以及需要使用何種方式將這些bean裝配到一起。xml配置檔案的根元素是beans,beans中包含了多個bean子元素,每乙個bean子...