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 :
Wow. This really made my day. Thanks a lot!
ReplyDeleteJQuery Training JQuery Training Javascript JQuery Online Training
JQuery Online Training JQuery Online Training Javascript Online Training JQuery Training
JavaScript Training Courses
This is easy to understand the following steps so thank you. sop for management information systems
ReplyDelete