Saturday 19 March 2011

Various Bean Scopes in Spring

Various Bean scopes in spring are :
  • singleton(default)
  • Prototype (non-singleton)
  • request
  • session
  • global session
Out of these 5, 3 are for web-aware Application Context.

Apart from these , we can create custom scopes as well. We have to define scope using scope attribute.
singleton :
This scope available for both BeanFactory and ApplicationContext.
Scopes a single bean definition to a single object instance per Spring IoC container.
when you define a bean definition and it is scoped as a singleton, then the Spring IoC container will create exactly one instance of the object defined by that bean definition. This single instance will be stored in a cache of such singleton beans, and all subsequent requests and references for that named bean will result in the cached object being returned.
singleton scope is the default scope.
<bean id="emailService" class="com.techfaq.EmailService"/> 
<!-- the following is equivalent, singleton scope is the default scope. -->
<bean id="emailService" class="com.techfaq.EmailService" scope="singleton"/>
<!-- the following is equivalent -->
<bean id="emailService" class="com.techfaq.EmailService" singleton="true"/>


prototype :
This scope available for both BeanFactory and ApplicationContext.
Scopes a single bean definition to any number of object instances.
Create a new bean instance every time a request for that specific bean is made ( is injected into another bean or it is requested via a programmatic getBean() method call on the container) .

<!-- create new instance every on request. --> 
<bean id="emailService" class="com.techfaq.EmailService" scope="prototype"/>
<!-- the following is equivalent -->
<bean id="emailService" class="com.techfaq.EmailService" singleton="false"/>


request :
Scopes a single bean definition to the lifecycle of a single HTTP request; that is each and every HTTP request will have its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext like XmlWebApplicationContext.
If you try using these next scopes with regular Spring IoC containers such as the XmlBeanFactory or ClassPathXmlApplicationContext, you will get an IllegalStateException complaining about an unknown bean scope.

<bean id="emailService" class="com.techfaq.EmailService" scope="request"/>


session :
Scopes a single bean definition to the lifecycle of a HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext like XmlWebApplicationContext.
If you try using these next scopes with regular Spring IoC containers such as the XmlBeanFactory or ClassPathXmlApplicationContext, you will get an IllegalStateException complaining about an unknown bean scope.

<bean id="emailService" class="com.techfaq.EmailService" scope="session"/>


global session :
Scopes a single bean definition to the lifecycle of a global HTTP Session. Typically only valid when used in a portlet context. Only valid in the context of a web-aware Spring ApplicationContext like XmlWebApplicationContext.
If you try using these next scopes with regular Spring IoC containers such as the XmlBeanFactory or ClassPathXmlApplicationContext, you will get an IllegalStateException complaining about an unknown bean scope.

<bean id="emailService" class="com.techfaq.EmailService" scope="globalSession"/>






Annotation Support for scope

No comments:

Post a Comment