Java/Spring/Singleton
BeanFactory PreInstantiate Singletons Integration
<source lang="java">
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="instantiationCounterClass" class="InstantiationCounterClass"/>
</beans>
File: Main.java import java.util.concurrent.atomic.AtomicInteger; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) throws Exception { ConfigurableListableBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource( "context.xml")); System.out.println(InstantiationCounterClass.getNumberOfInstantiations()); beanFactory.preInstantiateSingletons(); System.out.println(InstantiationCounterClass.getNumberOfInstantiations()); }
} class InstantiationCounterClass {
private static AtomicInteger instantiationCounter = new AtomicInteger(0); public static int getNumberOfInstantiations() { return instantiationCounter.get(); } public InstantiationCounterClass() { instantiationCounter.incrementAndGet(); }
}
</source>
Prototype Singleton
<source lang="java">
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="primeIterator" class="PrimeIterator" singleton="false"> <property name="start" value="1000"/> </bean>
</beans>
File: Main.java import java.util.Properties; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) throws Exception { BeanFactory beanFactory = new XmlBeanFactory( new ClassPathResource( "context.xml" ) ); PrimeIterator primeNumber1 = (PrimeIterator)beanFactory.getBean("primeIterator"); PrimeIterator primeNumber2 = (PrimeIterator)beanFactory.getBean("primeIterator"); System.out.println(primeNumber1.getNextPrime()); System.out.println(primeNumber2.getNextPrime()); }
} class PrimeIterator {
int start = -1; public int getNextPrime() { return start; } public int getStart() { return start; } public void setStart(int start) { this.start = start; }
}
</source>