1. 程式人生 > >Spring多利模式 註解@Scope("prototype")和xml配置scope="prototype"

Spring多利模式 註解@Scope("prototype")和xml配置scope="prototype"

這裡牽扯到單利模式的執行緒安全的設計。

我們知道sping ioc注入的bean;一般都是無狀態的【dao,service等,這種不會牽涉到值或者狀態改變的情況】,也就是在多執行緒下可以基本保證執行緒安全的;但是,有些情況下可能是有狀態的;有狀態的bean ,是要注意執行緒安全的;spring是有考慮到這方面的需求的;prototype 原型型別,應運而生;

1. 首先說下spring多例模式的兩種配置方式: 一個是程式碼添加註解的,一個是配置xml中bean的範圍:

1.1  xml配置:

<bean id="virtualProductService" class="com.san.mpa.service.VirtualProductService" scope="prototype">

1.2 註解配置:

@Scope("prototype")
public class CustInfoList extends HttpServlet {}

2. 為什麼要使用prototype,分析一下原因

2.1有狀態會話bean

每個使用者有自己特有的一個例項,在使用者的生存期內,bean保持了使用者的資訊,即“有狀態”;一旦使用者滅亡(呼叫結束或例項結束),bean的生命期也告結束。即每個使用者最初都會得到一個初始的bean。 

2.2無狀態會話bean

bean一旦例項化就被加進會話池中,各個使用者都可以共用。即使使用者已經消亡,bean   的生命期也不一定結束,它可能依然存在於會話池中,供其他使用者呼叫。由於沒有特定的使用者,那麼也就不能保持某一使用者的狀態,所以叫無狀態bean。但無狀態會話bean   並非沒有狀態,如果它有自己的屬性(變數),那麼這些變數就會受到所有呼叫它的使用者的影響,這是在實際應用中必須注意的。

使用prototype後可以使併發呼叫在不同的例項中完成,不會產生執行緒安全的問題。