]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
Simplify structure framework
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / ant / spring / AbstractSpringArg.java
index 5cf3e0831e1526c370eac75decca5639c9fd6c0e..7865241b4093d268a88c8d1dd60f08e53c4597c4 100644 (file)
@@ -17,6 +17,9 @@ public abstract class AbstractSpringArg extends DataType {
 \r
        private String bean;\r
 \r
+       // cache bean instance to avoid reading it twice if it is a prototype\r
+       private Object beanInstance = null;\r
+\r
        /** The <u>name</u> of the underlying bean, as set throught the attribute. */\r
        public String getBean() {\r
                return bean;\r
@@ -28,28 +31,29 @@ public abstract class AbstractSpringArg extends DataType {
        }\r
 \r
        /**\r
-        * Retrieve the instance of the bean. <b>If teh underlying Spring bean is a\r
-        * prototype, it will instanciated each time.</b>\r
+        * Retrieve the instance of the bean. <b>The value is cached.</b>\r
         */\r
-       protected Object getBeanInstance() {\r
-               Object obj = getContext().getBean(bean);\r
-\r
-               BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
-               for (OverrideArg override : overrides) {\r
-                       wrapper.setPropertyValue(override.getName(), override.getObject());\r
+       public Object getBeanInstance() {\r
+               if (beanInstance == null) {\r
+                       beanInstance = getContext().getBean(bean);\r
+\r
+                       BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);\r
+                       for (OverrideArg override : overrides) {\r
+                               wrapper.setPropertyValue(override.getName(), override\r
+                                               .getObject());\r
+                       }\r
                }\r
-\r
-               return obj;\r
+               return beanInstance;\r
        }\r
 \r
-       /** Creates an override subtag.*/\r
+       /** Creates an override subtag. */\r
        public OverrideArg createOverride() {\r
                OverrideArg propertyArg = new OverrideArg();\r
                overrides.add(propertyArg);\r
                return propertyArg;\r
        }\r
 \r
-       /** The related Spring application context.*/\r
+       /** The related Spring application context. */\r
        protected ApplicationContext getContext() {\r
                return (ApplicationContext) getProject().getReference(\r
                                SlcProjectHelper.REF_ROOT_CONTEXT);\r