Spring的原型Bean與單例Bean的設定
spring單例Bean
在spring中的Bean預設的情況下是單例模式的,在spring容器中配置設定Bean的時候(無論通過getBean()還是通過依賴注入(IOC)),它總是傳回同一個Bean的執行個體,如果你想每次向上下文請求一個bean的時候總是得到一個不同的執行個體,或者想每次想從spring容器中得到一個bean的不同執行個體,需要将bean定義為原型模式,定義為原型模式意味着你是定義一個bean的類,而不是一個單一的bean的執行個體,bean的執行個體都是按照這個類而建立的。
spring原型Bean
在spring中<bean>的singleton屬性告訴上下文這個bean是原型bean或者是單例bean。bean的預設值為 true,如果設為false的話,就把這個bean定義成了原型bean。例如:<beanid=”test” class=”demo.Demo” singleton=”false” />
在spring2.x中<bean id=”test”scope=”prototype”/>将這樣配置,但是如果想使用spring的原型bean必須通過getBean(”test”)這樣的方 式,而不能通過使用IOC方式,因為:getBean将每次都有spring來裝配轉發,而IOC将隻是一次注入的目标bean中,以後不再重新注入。這 樣通過getBean方式将得到一個原型bean。如果bean使用的是有限資源,如資料庫和網絡連結的話不需要使用原型bean,正常不要把 singleton=”false”或者scope=”prototype”除非必要。
Spring 單例Bean和Java 單例模式的差別
Spring的的單例是基于BeanFactory也就是spring容器,單例Bean在此Spring容器内是單個的,Java的單例是基于JVM,每個JVM内一個單例。