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