首先來看一下乙個簡單的ioc實現
public object getinstance(string classname) throws exception}}
上面的乙個方法我們就很簡單的使用了反射為指定的類的setstring方法來設定乙個hello world!字串。其實可以看到ioc真的很簡單,當然了ioc簡單並不表示spring的ioc就簡單,spring的ioc的功能強大就在於有一系列非常強大的配置檔案維護類,它們可以維護spring配置檔案中的各個類的關係,這才是spring的ioc真正強大的地方。在spring的bean 定義檔案中,不僅可以為定義bean設定屬性,還支援bean之間的繼承、bean的抽象和不同的獲取方式等等功能。
在spring的bean配置中總的來說其實就乙個標籤,這個bean標籤就攘括了幾乎所有的配置,然後bean的繼承、抽象等都是基於此標籤之上的,掌握了bean的配置,詳細可以使自己有乙個比較大的提公升,尤其是對於新手來說(我也是,呵呵 )。最基礎的bean配置如下:
這裡我們就簡單的使用helloworld類來例項化,使用預設的構造方法,即相當於我們使用:
helloworld tmp = new helloworld();
但有一點不同的是在spring配置中的在整個應用期間只有乙個例項,即是單例的,當然這個單例是指對乙個ioc容器(spring)來說的,而不是我們通常說說的單態模式。當然,spring也可以這樣配置不是單態的例項,比如我們修改如下:
注意其中的不同部分,這樣配置後就表明每次從spring容器中獲取helloworld的例項的時候就會new乙個新物件,即我們所說的原型,spring中scope預設的是單態(singleton),當然針對web應用程式,還可以配置為request、session等範圍。至於什麼時候使用什麼許可權範圍就要看應用程式的使用了,比如在多執行緒程式中,單態是否會對程式有所影響就需要考慮了。
如果helloworld類沒有空的構造方法,只有如下的兩個構造方法,那我們該如何配置呢?
……public helloworld(string str)
public helloworld(date date, int i)
……由於沒有預設構造方法,所以我們就需要在bean的配置中寫上構造引數才可以,如下:
> scope="prototype">
> hello
上面說的使用乙個引數的,即帶字串引數的構造方法,如果想使用帶日期和整型的構造方法,那麼就要做如下的配置了:
345
注意到上面的配置中我們使用了ref關鍵字,這個是表示引用配置檔案中的id為bean_date的物件,另外對於型別,spring會做恰當的轉換,比如將345轉換成數字等。當然,這樣對簡單的構造來說不會有什麼問題,如果情況比較複雜的話,那麼一般建議使用序號來標定,如下:
345
這樣,使用index屬性表示該引數所在位置了後,無論是spring構造起來,還是我們檢視都會很方便。當然,spring也提供了自動查詢,也就是依賴查詢的功能,但是這個我覺得大家還是少用,因為這樣會使整個配置檔案看起來非常的不直觀,而且不清晰,說不定過了一段時間再去看的時候就不知道是什麼意思了,在正式應用專案中,還是將各個bean的關係進行組織和編寫清楚為好。 Spring中bean標籤的屬性和值
spring中bean標籤的屬性和值 bean name user class com.pojo.user init method intmethod destroy method destorymethod lazy init false scope singleton property name...
Spring的Bean標籤配置(一)
由於配置物件交由spring來建立 預設情況下它呼叫的的是類中的無參建構函式,如果沒有無參建構函式則不會建立成功 public inte ce userdaopublic class userdaoimpl implements userdao public class userdemo 注意bea...
2 Spring中Bean標籤的常用屬性
bean標籤中的常用屬性 name student1,student2 class com.merpyzf.study01.student scope singleton id 屬性 id的屬性值名稱可以任意命名 注意 id的屬性值中不能包含一些特殊的字元或者中文 裝配bean時根據 id 值獲取物...