一、在 Spring Config 文件中,在 <bean> 元素的 scope 屬性裡設置 Bean 的作用域。默認為 singleton ,單例的。
二、在不引入 spring-web-4.0.0.RELEASE.jar 包的情況下,scope 屬性只有兩個值:singleton 和 prototype。
1.singleton(單例)
Spring 為每個在 IOC 容器中聲明的 Bean 創建一個實例,整個 IOC 容器范圍都能共用。通過 getBean() 返回的對象為同一個對象。
如:
<bean class="com.nucsoft.spring.bean.Employee" id="employee" p:empName="emp01" p:age="12"/>
@Test public void test01() { Employee employee = ctx.getBean(Employee.class); System.out.println(employee); Employee employee2 = ctx.getBean(Employee.class); System.out.println(employee2); }
控制台輸出:
com.nucsoft.spring.bean.Employee@1ed71887
com.nucsoft.spring.bean.Employee@1ed71887
2.prototype(原型),每次調用 getBean() 都會返回一個新的實例
<bean class="com.nucsoft.spring.bean.Employee" id="employee" p:empName="emp01" p:age="12" scope="prototype"/>
@Test public void test01() { Employee employee = ctx.getBean(Employee.class); System.out.println(employee); Employee employee2 = ctx.getBean(Employee.class); System.out.println(employee2); }
控制台輸出:
com.nucsoft.spring.bean.Employee@652e3c04
com.nucsoft.spring.bean.Employee@3e665e81
這裡不對 web 環境的 Bean 的作用域進行討論,事實上,我們常用到的也就這兩種。