Point.java
package com.dineshonjava.sdnext.beanscope.tutorial; public class Point { private int x; private int y; /** * @return the x */ public int getX() { return x; } /** * @param x the x to set */ public void setX(int x) { this.x = x; } /** * @return the y */ public int getY() { return y; } /** * @param y the y to set */ public void setY(int y) { this.y = y; } }
spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:>
DrawingApp.java
package com.dineshonjava.sdnext.beanscope.tutorial; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh Rajput * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Point point1 = (Point) context.getBean("zeroPoint"); Point point2 = (Point) context.getBean("zeroPoint"); if(point1 == point2) System.out.println("In Singleton Demo >> Both are same objects values are.." + "n 1. point1= "+point1+" n 2. point2= "+point2); else System.out.println("In Protptype Demo >> Both are different objects values are.." + "n 1. point1= "+point1+" n 2. point2= "+point2); } }Output:Jun 28, 2012 9:10:46 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Thu Jun 28 21:10:46 IST 2012]; root of context hierarchyJun 28, 2012 9:10:46 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [spring.xml]Jun 28, 2012 9:10:46 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1543c88: defining beans [zeroPoint]; root of factory hierarchyIn Protptype Demo >> Both are different objects values are..
1. point1= com.dineshonjava.sdnext.beanscope.tutorial.Point@d3d6f
2. point2= com.dineshonjava.sdnext.beanscope.tutorial.Point@13c468aOnce you are done with creating source and bean configuration files, let us run the application. If everything is fine with your application, this will print the above message: See the both address value of the object is different.Bean scopes using annotation:
spring.xml<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:>
Here component-scan element has attribute 'base-package'. base-package contain the base package of the Bean class.
base-package = "com.dineshonjava.sdnext.beanscope.tutorial"
Ponit.java
package com.dineshonjava.sdnext.beanscope.tutorial; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @Service @Scope("prototype") public class Point { private int x; private int y; /** * @return the x */ public int getX() { return x; } /** * @param x the x to set */ public void setX(int x) { this.x = x; } /** * @return the y */ public int getY() { return y; } /** * @param y the y to set */ public void setY(int y) { this.y = y; } }
Annotation @Service:Target : ClassDescription:Here @Service is streotype annotation which declared above the class name that means this class is a bean of the spring container.In Spring container this bean recognized by the id "point" means that same as the class name except first letter of the class name is the small letter.for example: class 'Point' get as 'point' beanclass 'Circle' get as 'circle' bean
Annotation @Scope:Target : ClassDescription:Here @Scope is annotation which declared above the class name that define the scope the bean@Scope("singleton")
@Scope("prototype")
DrawingApp.java
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.dineshonjava.sdnext.beanscope.tutorial.Point; /** * @author Dinesh Rajput * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Point point1 = (Point) context.getBean("point"); Point point2 = (Point) context.getBean("point"); if(point1 == point2) System.out.println("In Singleton Demo >> Both are same objects values are.." + "n 1. point1= "+point1+" n 2. point2= "+point2); else System.out.println("In Protptype Demo >> Both are different objects values are.." + "n 1. point1= "+point1+" n 2. point2= "+point2); } }Output:Jun 28, 2012 10:59:39 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@758fc9: startup date [Thu Jun 28 22:59:39 IST 2012]; root of context hierarchy
Jun 28, 2012 10:59:39 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.xml]
Jun 28, 2012 10:59:39 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@bb7759: defining beans [point,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
In Protptype Demo >> Both are different objects values are..
1. point1= com.dineshonjava.sdnext.beanscope.tutorial.Point@d3d6f
2. point2= com.dineshonjava.sdnext.beanscope.tutorial.Point@13c468a
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…