根據springsource
文檔,一個singleton
範圍的bean僅在每個容器的
中實例化一次。例如,我有一個包含關於用戶的信息
的bean,其範圍爲UserDetails
。
以我main()方法:瞭解網絡應用程序中的彈簧豆的範圍
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
UserDetails ud1 = (UserDetails)context.getBean("userDetails");
custA.setAddress("Address set by ud1");
System.out.println("Address : " + ud1.getAddress());
UserDetails ud2 = (UserDetails)context.getBean("userDetails");
System.out.println("Address : " + ud2.getAddress());
的輸出將是
Address set by ud1
Address set by ud1
由於爲userDetails的是一個單獨的豆,通過ud2
第二檢索將給出相同的結果UD1的。
NOW這裏是我的問題:
對於我的web應用程序,我有以下我dispatcher-servlet.xml.
<bean id="userDetails" class="com.mukund.DTO.UserDetails" />
第一個問題UserDetails
豆:是單身的範圍是一個Web應用程序的默認太?
如果是:
此bean自動裝配到AccountService
和CustomerService
類中。
如果客戶說clientA
已設置用戶的名字到「用戶A」中的CustomerService類和一段時間後,它的AccountService類檢索的第一個名字,
第二個問題:做它獲取相同的 UserDetails的實例與「UserA」作爲名?
第三個問題:同時,如果另一個客戶端說clientB
試圖獲得AccountService類中的名字,它會得到「UserA」?
第四個問題:將由clientA,clientB和其他人共享相同的UserDetails實例嗎?如果是:選擇原型,請求或會話的範圍。
我希望你能理解我的觀點。請解釋我的春天豆作用域關於Web應用程序。
THANKS
那麼在調度程序-servlet中定義爲hibernate sessionfactory bean爲」?如果是,所有用戶都將使用相同的sessionfactory,那麼它是否爲單例範圍的bean?如果是,那麼當'session.getCurrentSession'被調用時,所有會話都會得到相同的會話?請解釋我這個... –
mukund
是的sessionfactory是一個單身人士。 SessionFactory是一個重量級的單例風格對象,而會話只存在於「短」時間跨度。詳細信息以及'current session'的含義在hibernate文檔中有很好的解釋:http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/context/CurrentSessionContext.html(只需檢查子類與您的應用程序相匹配)。請注意,創建SessionFactory的標準Spring方法是http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/orm/hibernate3/LocalSessionFactoryBean.html – micha
Singleton作用域爲默認值對於Spring來說,無論是哪種應用程序。無狀態bean應該被標記爲單例或請求,有狀態bean可以是會話作用域的原型,具體取決於你想要使用它們多長時間。 –