spring中的Bean的id和name的區別

2021-08-08 22:31:59 字數 1183 閱讀 7452

spring中bean的命名

1、每個bean可以有乙個id屬性,並可以根據該id在ioc容器中查詢該bean,該id屬性值必須在ioc容器中唯一;

2、可以不指定id屬性,只指定全限定類名,如:

此時需要通過介面getbean(class requiredtype)來獲取bean;

如果該bean找不到則拋異常:nosuchbeandefinitionexception

如果該型別的bean有多個則拋異常:nouniquebeandefinitionexception

3、如果不指定id,只指定name,那麼name為bean的識別符號,並且需要在容器中唯一;

4、同時指定name和id,此時id為識別符號,而name為bean的別名,兩者都可以找到目標bean;

5、可以指定多個name,之間可以用分號(「;」)、空格(「 」)或逗號(「,」)分隔開,如果沒有指定id,那麼第乙個name為識別符號,其餘的為別名;若指定了id屬性,則id為識別符號,所有的name均為別名。如:

此時,hello1為識別符號,而alias1,alias2,alias3,alias4為別名,它們都可以作為bean的鍵值;

6、可以使用標籤指定別名,別名也必須在ioc容器中唯一,如:

ref和idref之間的區別

在spring中,idref屬性和ref屬性都可以用在constructor-arg元素和property元素中完成注入,那麼它之間有什麼區別呢?

teststring

其實,idref注入的是目標bean的id而不是目標bean的例項,同時使用idref容器在部署的時候還會驗證這個名稱的bean是否真實存在。其實idref就跟value一樣,只是將某個字串注入到屬性或者建構函式中,只不過注入的是某個bean定義的id屬性值。所以上面的**中

其實等同於

bea而ref則是完全地不同,ref元素是將目標bean定義的例項注入到屬性或建構函式中,ref元素有三個屬性,區別如下:

1、local 只能指定與當前配置的bean在同乙個配置檔案中的bean定義的名稱; 2、parent 只能指定位於當前容器的父容器中定義的物件引用; 3、bean 基本上通吃,即包括以上兩種情況都可以,所以,通吃情況下,直接使用bean來指定物件引用就可以了。 所以,上面那段配置**中,beanid這個bean中建構函式的引數name注入的只是「bea」這個字串;而其id屬性注入的則是teststring這個字串。

spring中bean的id是否一定要有

spring中bean的命名 1 每個bean可以有乙個id屬性,並可以根據該id在ioc容器中查詢該bean,該id屬性值必須在ioc容器中唯一 2 可以不指定id屬性,只指定全限定類名,如 此時需要通過介面getbean classrequiredtype 來獲取bean 如果該bean找不到則...

Spring中Bean的配置

以下面的xml檔案舉例 第乙個bean的名稱為role,第二個bean的名稱為medicine,第三個bean的名稱為spring.chapter.mary.poison,第四個bean的名稱為spring.chapter.mary.poison 1 id和name的區別如下 id屬性具有唯一性,每...

spring中bean的建立

問題 1 bean 的建立時機 bean 是在什麼時候被建立的,有哪些規則?容器初始化的時候會預先對單例和非延遲載入的物件進行預先初始化。其他的都是延遲載入是在第一次呼叫getbean 的時候被建立。從 defaultlistablebeanfactory 的 preinstantiatesingl...