Lookup Performance
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress */ /////////////////////////////////////////////////////////////////////////////////////// //File: lookup.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="helper" class="MyHelper" singleton="false"/> <bean id="abstractLookupBean" class="AbstractLookupDemoBean"> <lookup-method name="getMyHelper" bean="helper"/> </bean> <bean id="standardLookupBean" class="StandardLookupDemoBean"> <property name="myHelper"> <ref local="helper"/> </property> </bean> <bean id="factoryLookupBean" class="BeanFactoryAwareLookupDemoBean"/> </beans> /////////////////////////////////////////////////////////////////////////////////////// public interface DemoBean { public MyHelper getMyHelper(); public void someOperation(); } /////////////////////////////////////////////////////////////////////////////////////// public class MyHelper { public void doSomethingHelpful() { // do something! } } /////////////////////////////////////////////////////////////////////////////////////// public class StandardLookupDemoBean implements DemoBean { private MyHelper helper; public void setMyHelper(MyHelper helper) { this.helper = helper; } public MyHelper getMyHelper() { return this.helper; } public void someOperation() { helper.doSomethingHelpful(); } } /////////////////////////////////////////////////////////////////////////////////////// public abstract class AbstractLookupDemoBean implements DemoBean { public abstract MyHelper getMyHelper(); public void someOperation() { getMyHelper().doSomethingHelpful(); } } /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; public class BeanFactoryAwareLookupDemoBean implements BeanFactoryAware, DemoBean { private BeanFactory factory = null; public void setBeanFactory(BeanFactory factory) throws BeansException { this.factory = factory; } public MyHelper getMyHelper() { return (MyHelper) factory.getBean("helper"); } public void someOperation() { getMyHelper().doSomethingHelpful(); } } /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; import org.springframework.util.StopWatch; public class LookupPerformance { public static void main(String[] args) { BeanFactory factory = new XmlBeanFactory(new FileSystemResource( "build/lookup.xml")); DemoBean abstractBean = (DemoBean) factory.getBean("abstractLookupBean"); DemoBean factoryBean = (DemoBean) factory.getBean("factoryLookupBean"); testPerf(abstractBean); testPerf(factoryBean); } public static void testPerf(DemoBean bean) { StopWatch stopWatch = new StopWatch(); stopWatch.start("perfTest"); for (int x = 0; x < 1000000; x++) { MyHelper helper = bean.getMyHelper(); helper.doSomethingHelpful(); } stopWatch.stop(); System.out.println("1000000 gets took " + stopWatch.getTotalTimeSeconds() + " seconds"); } }