- singleton:在Spring IoC Container,該bean只會有單一實例(a single instance),此為Spring預設值
- prototype:在Spring IoC Container中,該bean可以有多個實例(any number of object instances)
- request: 在每一次的HTTP Request,spring container會根據loginAction bean的定義來建立一個全新的instance,而且僅在目前的request中有效,所以可以放心的去更改instance的內部狀態,請求結束,request scope的bean instance會被destroy
- session:針對某個HTTP Session,spring container會根據userPreference bean的定義來建立一個全新的instance,同樣的,和request scope一樣,可以放心的去更改instance內部狀態。
- global-session:僅在portlet為基礎的Web應用下有作用。Porlet的規範中定義了global session的概念。
在定義scope時,會在bean中定義如下:
<bean id="helloWorld" class="HelloWorld" scope="singleton">
當scope設定為singleton時,整個container只會有一個instance,所以下方的obj和obj1都會是同一個instance。
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.setMessage("hello");
obj.getMessage();
HelloWorld obj1 = (HelloWorld) context.getBean("helloWorld");
obj1.getMessage();
<bean id="helloWorld" class="HelloWorld" scope="prototype">
如果設定為prototype時,obj和obj1將會是不同的instances,可以分別進行操作。在這裡,singleton的單一instance是用id來進行識別,不同id、相同class時,還是可以有多個instances(getBean傳入不同的id即可)。request、session和global-session三種scope只能在web環境中使用,如果在非web環境設定,會出現【No Scope registered for scope 'request'】的錯誤。
0 意見:
張貼留言