在 Spring XML 配置中,透過 <bean> 的 scope 屬性定義 Bean 的生命週期範圍。若不引入 spring-web,僅支援兩種核心作用域。
IOC 容器對每個 Bean 定義僅建立一個實例,整個容器共享。多次 getBean() 返回同一物件引用。
<bean id="employee" class="com.nucsoft.spring.bean.Employee"
p:empName="emp01" p:age="12"/>
Employee e1 = ctx.getBean(Employee.class); Employee e2 = ctx.getBean(Employee.class); System.out.println(e1 == e2); // true // 輸出同一個 hashcode
每次 getBean() 或注入時,容器都會建立新實例。
<bean id="employee" class="com.nucsoft.spring.bean.Employee"
p:empName="emp01" p:age="12" scope="prototype"/>
Employee e1 = ctx.getBean(Employee.class); Employee e2 = ctx.getBean(Employee.class); System.out.println(e1 == e2); // false // 輸出不同 hashcode
引入 spring-web 後新增:
request:每次 HTTP 請求建立新實例session:每個 HTTP Session 建立新實例application:每個 ServletContext 建立新實例websocket:每個 WebSocket 會話建立新實例ObjectFactory、Provider 或 @Lookup 取得新實例