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=6c64235986740357cfff57a52f818b13fabe5ea2;hb=875f97b054c6e996fa2d03c299c83cc80d336b54;hp=4061f377ff21b295aa6357070d0e2f21458f0c7c;hpb=2d2e8673ee9a9c610dcd831833cb67c3a508c372;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 4061f377f..6c6423598 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 @@ -7,42 +7,54 @@ import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.springframework.context.ApplicationContext; -import org.apache.tools.ant.Location; -import org.apache.tools.ant.Project; import org.apache.tools.ant.types.DataType; import org.argeo.slc.ant.SlcProjectHelper; +/** Abstract Ant type wrapping a Spring bean. */ public abstract class AbstractSpringArg extends DataType { private List overrides = new Vector(); 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; } + /** Setter for the bean name. */ public void setBean(String bean) { this.bean = bean; } - protected Object getBeanInstance() { - Object obj = getContext().getBean(bean); - - BeanWrapper wrapper = new BeanWrapperImpl(obj); - for (OverrideArg override : overrides) { - wrapper.setPropertyValue(override.getName(), override.getObject()); + /** + * Retrieve the instance of the bean, and sets the overriden properties. + * The value is cached. + */ + 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. */ public OverrideArg createOverride() { OverrideArg propertyArg = new OverrideArg(); overrides.add(propertyArg); return propertyArg; } + /** The related Spring application context. */ protected ApplicationContext getContext() { return (ApplicationContext) getProject().getReference( SlcProjectHelper.REF_ROOT_CONTEXT);