1. 程式人生 > >Spring Bean 的 scope屬性為何要設定為prototype

Spring Bean 的 scope屬性為何要設定為prototype

<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就可以。