1. 程式人生 > >Spring入門學習(Bean的作用域) 第六節

Spring入門學習(Bean的作用域) 第六節

Spring入門學習 第六節

作用域

  1. 使用bean的scope屬性來指定建立的bean的作用域,該屬性值預設是單例的singleton
  2. 建立一個car的bean,使用的是第四節中建立的Car
    <bean id="car" class="com.fafa.spring.autowire.Car"
    	scope="singleton">
    	<property name="brand" value="Audi"></property>
    	<property name="price" value
    ="300000">
    </property> </bean>
  3. 建立測試類
    	@Test
    	public void testScope() {
    		ApplicationContext ctx = new ClassPathXmlApplicationContext(
    				"classpath*:beans-scope.xml");
    		Car car = (Car) ctx.getBean("car");
    		Car car2 = (Car) ctx.getBean("car");
    		// scope=singleton的時候為true,prototype時為false
    System.out.println(car == car2); }
    測試結果為true
  4. 指定scope="prototype"時再測試得到測試結果為false
  5. 為Car類中新增一個預設的無參構造方法:
    	public Car(){
    		System.out.println("Car's constructor....");
    	}
    
  6. 在測試類中保留如下,看看初始化IOC容器時發生了什麼:
    	@Test
    	public void testScope() {
    		ApplicationContext ctx = new ClassPathXmlApplicationContext
    ( "classpath*:beans-scope.xml"); }
    測試結果:
    Car's constructor....
    
    在作用域為singleton模式下,容器初始化時呼叫了Car的無參構造方法建立了Car物件,每次使用對應的bean時都是同一個物件,所以上面比較car和car2是返回結果是true
    scope="prototype"時,剛才的測試方法不會返回任何結果,只有在獲取bean的時候,容器才會建立對應的物件,且二者比較結果返回false
    Car's constructor....
    Car's constructor....
    false