Spring bean scopes
15 December 2012
In this tutorial you will learn about Spring bean scopes and how to use them.
Spring bean scopes
When you define a Spring bean you are actually defining it within a scope. The following five scopes are provided by Spring out-of-the-box:
Scope | Description |
---|---|
singleton | When a bean is defined with singleton scope the Spring container will assure that there will be only a single instance of this bean. Every time a singleton bean is requested by the application the container will always deliver the same bean instance. |
prototype | When a bean is defined with prototype scope the Spring container will always deliver a new instance of the bean to the caller. |
request | This scope only makes sense when Spring is used in a web application context. The Spring container will assure that it will deliver a new instance of this bean to the caller for every single HTTP request. |
session | This scope only makes sense when Spring is used in a web application context. The Spring container will assure that it will deliver a new instance of this bean to the caller and this same instance will be always delivered during the entire HTTP session. |
globalSession | This scope only makes sense when Spring is used in a portal web application context. The portlet specification states that a global session should be defined and shared amongst all the portlets that constitute a portal application. The Spring container will assure that the same bean instance will be delivered during the portlet global session lifetime. |
When no scope is defined for a bean the Spring container will assume that the bean scope is singleton. This is the default Spring bean scope.
Example using annotations
If we want to define a Spring bean with prototype scope using annotations we do it like the following:
ExampleBean defined with prototype scope using annotations
package com.byteslounge.spring; import org.springframework.stereotype.Service; @Service @Scope("prototype") public class ExampleBean { public String sayHello() { return "Hello!"; } }
Note the prototype scope defined in the @Scope annotation.
Example using Spring configuration XML
If we want to define a Spring bean with prototype scope using the Spring configuration XML we must define it in the bean declaration:
ExampleBean defined with prototype scope in Spring configuration XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="exampleBean" class="com.byteslounge.spring.ExampleBean" scope="prototype" /> </beans>
Note the prototype scope defined in the scope bean definition attribute.