The core of the Spring framework is a Bean Factory and it's mechanism to create and manage the beans inside the Spring containers. In bean, attribute Scope is referred to what kind of object has to create and returned to the container.
In Spring, there are five bean scopes are available, three of which are available only if you use web-aware ApplicationContext. Bean scopes are singleton, prototype, request, session and global session.
Spring bean configuration file : spring-employee.xml (if scope is not declared, default it should be singleton)
Spring code - Main Program
Output : Message : empService Message
Message : empService Message
Run the main program, you will get output
Output : Message : empService Message
Message : null
In Spring, there are five bean scopes are available, three of which are available only if you use web-aware ApplicationContext. Bean scopes are singleton, prototype, request, session and global session.
Spring Bean Scopes |
- singleton
The Spring IOC container can create only one instance per container irrespective of how many times you request for this instance. This is the default bean scope. This singleton behavior is maintained by bean factory itself.
Example:- EmployeeService.java,
package com.adnblog.employee;
public class EmployeeService {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Spring bean configuration file : spring-employee.xml (if scope is not declared, default it should be singleton)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="employeeService"
class="com.adnblog.employee.EmployeeService" />
</beans>
Spring code - Main Program
package com.adnblog;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.adnblog.employee.EmployeeService;
public class MainClass {
public static void main( String[] args ) {
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"spring-employee.xml"});
EmployeeService empService = (EmployeeService)context.getBean("employeeService");
empService.setMessage("empService Message");
System.out.println("Message : " + empService.getMessage());
//trying to create second instance
EmployeeService empService1 = (EmployeeService)context.getBean("employeeService");
System.out.println("Message : " + empService1.getMessage());
}
}
Output : Message : empService Message
Message : empService Message
- prototype
The Spring IOC container creates new bean instance of the object at every time request for that specific bean is made.
To achieve prototype scope, declare scope attribute as prototype in the bean configuration file as below,
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="employeeService"
class="com.adnblog.employee.EmployeeService" scope="prototype"/>
</beans>
Run the main program, you will get output
Output : Message : empService Message
Message : null
- request
In this bean scope, a new bean instance will be created for each web
request made by client. As soon as request completes, bean will be out
of scope and garbage collected. This scope only available web aware ApplicationContext i.e WebApplicationContext.
- session
It is also like request scope, this ensures one instance of bean per user
session. As soon as user ends its session, bean is out of scope. This scope only available web aware ApplicationContext i.e WebApplicationContext.
- global-session
This
is something which is connected to Portlet
applications. When your application works in Portlet container it is
built of some amount of portlets. Each portlet has its own session, but
if your want to store variables global for all portlets in your
application than you should store them in global-session. This scope doesn’t have any special effect different from session scope in Servlet based applications.
No comments:
Post a Comment