Spring Bean 的 scope屬性為何要設定為prototype
阿新 • • 發佈:2019-01-12
<bean id = "testAction" class = "com.kewen.xxxAction" scope = "prototype"/>
Spring Bean中為何有的地方要將scope屬性設為prototype?
先簡單說一下兩個屬性值:
1.Spring中Bean的配置,如果不顯式指明scope的值,那麼預設為單例singleton。也就是說這個Bean只會新建一個例項。
2.設定為prototype之後,就會建立多個例項,可以理解為會new很多次。而singleton只會new一個例項
準確的說,每次spring要獲取bean的時候,都會呼叫getBean()方法
如果這個bean是singleton,那就會取唯一的一個例項出來
如果是prototype,那麼每次getBean(),都會new一個新例項
舉兩個簡單的例子對比一下:
Class TestAction{
private int age;
}
每次請求都會傳age過來,如果這個Action是個單例的話,後面請求的age,就把前面的給覆蓋了,所以必須設定成prototype
class TestService{ @Autowired private IUserDAO dao; }
由於它沒有例項變數,所以不存在衝突的問題,用預設的單例就可以了
總結一下
1.對於有例項變數的類,要設定成prototype;沒有例項變數的類,就用預設的singleton
2.Action一般我們都會設定成prototype,而Service只用singleton就可以。