Bean的基本定義

    <beans>標籤的屬性

<beans>元素是Spring配置文件的根元素,該元素下能夠指定以下屬性:java

   1)default-lazy-init:指定該<beans>元素下全部的Bean默認的延遲初始化行爲;spring

   2)default-merge:指定該<beans>下配置的全部Bean默認的merget行爲;session

   3)default-autowire:指定該<beans>元素下配置的全部Bean默認的自動裝配行爲;app

   4)default-autowire-candidates:指定該<beans>元素下配置的全部Bean默認是否做爲自動裝配的候選Bean。測試

    5)default-init-method:指定該<beans>元素下配置的全部Bean默認的回收方法。spa

    <beans>元素上面所能指定的屬性均可以在每一個<bean> 子元素中指定--將屬性名default去掉便可。prototype

當咱們在配置文件中經過<bean id="xx" class=""/>方法配置一個Bean時,這樣要求該Bean實現類必須有一個無參數的構造器。而且calss必須爲具體的實現類,不能爲接口。code

    在默認狀況下,當Spring建立ApplicationContext容器時,Spring會自動預初始化容器中全部的singleton實列,若是不想讓Spring容器預初始化某個singleton Bean,則能夠爲該<bean>元素增長lazy-init屬性,指定該屬性爲true,則Spring不會預初始化該Bean實列。xml

       容器中Bean的做用域 

    當經過Spring容器建立一個Bean實列時,不只能夠完成Bean實列的實列化,還能夠爲其指定做用域;對象

    1)singleton:單列模式,在整個Spring IOC容器中,使用singleton定義的Bean將只有一個實列。這也是Spring的默認做用域。

    2)prototype:原型模式,每次經過getBean方法獲取prototype定義的Bean時,都將產生一個新的Bean實列。

    3)request:對於每次HTTP請求,使用request定義的Bean都將產生一個新實列,即每次HTTP請求將會產生不一樣的Bean實列。只有在Web應用中使用Spring時,該做用域才真正有效。

    4)session:對於每次HTTP Session,使用session定義的Bean都將產生一個新實列,即每次HTTP Session都將產生不一樣的Bean實列。只有在Web應用中使用Spring時,該做用域才真正有效。

    5)global session:每一個全局的HTTP Session對應一個Bean實列。典型狀況下,僅在使用protlet context的時候有效。只有在Web應用中使用Spring時,該做用域才真正有效。

<!-- 單列 -->
   <bean id="stoneAxe1" scope="singleton" class="com.custle.spring.StoneAxe"/>
 	 <!-- 原型 -->
   <bean id="stoneAxe2" scope="prototype" class="com.custle.spring.StoneAxe"/>

測試程序:

package com.custle.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTest {

	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-spring.xml");
		// 判斷stoneAxe1--單列
		System.out.println("單列對象是否爲同一對象:" + (applicationContext.getBean("stoneAxe1") == applicationContext
				.getBean("stoneAxe1")));
		// 判斷stoneAxe2--單列
		System.out.println("原型對象是否爲同一對象:" + (applicationContext.getBean("stoneAxe2") == applicationContext
				.getBean("stoneAxe2")));
	}

}

控制檯輸出:

單列對象是否爲同一對象:true
原型對象是否爲同一對象:false

從這能夠看出:對於singleton做用域的Bean,每次請求該ID的Bean,都將返回同一個共享實列,於是兩次獲取的Bean實列徹底相同;但對於prototype做用域的Bean,每次請求都將產生新的實列。

若是將該Bean的做用域範圍該爲reauest,針對每次HTTP請求,Spring容器會根據該Bean定義一個全新的Bean實列,而且該Bean實列僅在當前HTTP Request內有效。

相關文章
相關標籤/搜索