1.spring中創建對象的三種方式
- 使用無參數構造器創建
- 使用靜態工廠方法創建
- 使用實例化對象工廠方法創建
<!-- 使用無參數構造器 -->
<bean id="person" class="com.boe.Person"></bean>
<!-- 使用靜態工廠方法 -->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance">
<!-- 使用實例化對象工廠方法 -->
<bean id="date" factory-bean="cal" factory-method="getTime"></bean>
2.作用域
作用域有singleton和prototype,默認為前者,設置延遲加載只對singleton有效。
- 當scope為singleton時
可以看出作用域為singleton時,對象只創建了一次,並且兩者相等,雖然使用getBean方法兩次,但是卻只有一個對象,似乎對象不是getBean方法獲得,這跟后面要說的延遲加載有關。 - 當scope為prototype時
當作用域為prototype時,創建了兩個對象,並且兩者不相等,說明使用一個getBean方法,就創建了一個新的對象。
延遲加載:默認情況下容器啟動之后,會將作用域為singleton的bean創建好,設置延遲加載容器啟動之后,對作用域為singleton的bean不再創建,直到調用getBean方法才會創建,設置延遲加載需在配置文件中設置lazy-init屬性。
(1)scope="singleton",lazy-init="false":啟動容器就創建對象,並且只有一個
(2)scope="singleton",lazy-init="true":啟動容器不會創建對象,直到調用getBean方法才會創建對象,並且只有一個
(3)scope="prototype",無論是否設置延遲加載,均只有在調用getBean方法才會創建對象,並且是創建多個不同的對象