X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FAbstractSpringArg.java;h=7865241b4093d268a88c8d1dd60f08e53c4597c4;hb=2052d0beab9c68880b3e8b0172a707274004b35f;hp=5cf3e0831e1526c370eac75decca5639c9fd6c0e;hpb=0f791a4a919e71bf36f28a13909e33d843fb9c55;p=gpl%2Fargeo-slc.git
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
index 5cf3e0831..7865241b4 100644
--- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
+++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
@@ -17,6 +17,9 @@ public abstract class AbstractSpringArg extends DataType {
private String bean;
+ // cache bean instance to avoid reading it twice if it is a prototype
+ private Object beanInstance = null;
+
/** The name of the underlying bean, as set throught the attribute. */
public String getBean() {
return bean;
@@ -28,28 +31,29 @@ public abstract class AbstractSpringArg extends DataType {
}
/**
- * Retrieve the instance of the bean. If teh underlying Spring bean is a
- * prototype, it will instanciated each time.
+ * Retrieve the instance of the bean. The value is cached.
*/
- protected Object getBeanInstance() {
- Object obj = getContext().getBean(bean);
-
- BeanWrapper wrapper = new BeanWrapperImpl(obj);
- for (OverrideArg override : overrides) {
- wrapper.setPropertyValue(override.getName(), override.getObject());
+ public Object getBeanInstance() {
+ if (beanInstance == null) {
+ beanInstance = getContext().getBean(bean);
+
+ BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);
+ for (OverrideArg override : overrides) {
+ wrapper.setPropertyValue(override.getName(), override
+ .getObject());
+ }
}
-
- return obj;
+ return beanInstance;
}
- /** Creates an override subtag.*/
+ /** Creates an override subtag. */
public OverrideArg createOverride() {
OverrideArg propertyArg = new OverrideArg();
overrides.add(propertyArg);
return propertyArg;
}
- /** The related Spring application context.*/
+ /** The related Spring application context. */
protected ApplicationContext getContext() {
return (ApplicationContext) getProject().getReference(
SlcProjectHelper.REF_ROOT_CONTEXT);