How beans are defined in the IoC container ?
Spring uses the notion of bean scopes to answer to this question .
we have 6 scopes :
>singleton, prototype, thread ,request, session, and globalSession .
the new Scope in the Spring 3.0 is thread .
Note: Singleton, prototype ,request, session, and globalSession Scopes are explained in this tutorial.
Note: Singleton, prototype ,request, session, and globalSession Scopes are explained in this tutorial.
Thread Scope Utility :
>it Creates a bean instance per thread. Similar to request scope.
Thread Scope VS Request Scope:
>Thread Scope is available to all context implemenetation scope .
>Request Scope is available only to application contexts (web-freindly)
Note : Thread Scope requires registration with the CustomScopeConfigurer bean.
Illustration of Thread Scope Behavior :
1.Create Maven Project :
2.Edit pom.xml file & add Spring 3 Dependencies :
_______________________________
3.Create Class for Spring instanciation Test :
>slm.abdennour.springcore.Cv
4.Create Runnable Class & Main Method:
5.Add two beans in Spring Config XML :
> one for singleton scope (which is the default scope)
>other for thread scope .
6.Run & Result :
As the default scope is Singleton, cvSimple beans are the Same for all instanciation of Spring Factory container.
7.Source Code :
2.Edit pom.xml file & add Spring 3 Dependencies :
<properties><spring.version>3.0.5.RELEASE</spring.version></properties><dependencies><!-- Spring 3 dependencies --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency></dependencies>
_______________________________
3.Create Class for Spring instanciation Test :
>slm.abdennour.springcore.Cv
package slm.abdennour.springcore;import java.util.Random;/**** @author Abdennour عبد النور التومي** @see http://abdennour-insat.blogspot.com* @since 10 nov. 2012*/public class Cv {private String fullName;public Cv() {this.fullName=getRandomString();}public String getFullName() {return fullName;}public void setFullName(String fullName) {this.fullName = fullName;}public void display(){System.out.println(this.fullName);}public String getRandomString(){char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();StringBuilder sb = new StringBuilder();Random random = new Random();for (int i = 0; i < 20; i++) {char c = chars[random.nextInt(chars.length)];sb.append(c);}String output = sb.toString();return output;}}
4.Create Runnable Class & Main Method:
package slm.abdennour.springcore;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/**** @author Abdennour عبد النور التومي** @see http://abdennour-insat.blogspot.com* @since 11 nov. 2012*/public class CvRun implements Runnable {ApplicationContext ctx;public CvRun(ApplicationContext ctx) {// TODO Auto-generated constructor stubthis.ctx = ctx;}public final void run() {// TODO Auto-generated method stubtry {Cv cvChild = ctx.getBean("cvThread", Cv.class);System.out.println("Cv Thread Child =>" + cvChild.getFullName());} finally {// TODO: handle exception}}public static void main(String[] args) {ApplicationContext appCtx=new ClassPathXmlApplicationContext("ctx.xml");Cv cvPatent = appCtx.getBean("cvThread", Cv.class);System.out.println("Cv Thread Parent =>" + cvPatent.getFullName());//Cv THreadCvRun cvrun=new CvRun(appCtx);new Thread(cvrun).start();//Cv SimpleSystem.out.println("Simple");for (int j = 0; j < 5; j++) {System.out.print("cv Simple "+j+"=>");((Cv)appCtx.getBean("cvSimple", Cv.class)).display();}}}
5.Add two beans in Spring Config XML :
> one for singleton scope (which is the default scope)
>other for thread scope .
<beanid="cvSimple"class="slm.abdennour.springcore.Cv"></bean><bean class="org.springframework.beans.factory.config.CustomScopeConfigurer" ><property name="scopes" ><map><entry key="thread" ><bean class="org.springframework.context.support.SimpleThreadScope" /></entry></map></property></bean><beanid="cvThread"class="slm.abdennour.springcore.Cv"scope="thread"></bean>
6.Run & Result :
As the default scope is Singleton, cvSimple beans are the Same for all instanciation of Spring Factory container.
7.Source Code :








