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=a29c28266fef35c1620f6582ec182bad7f7f85ae;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..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 @@ -7,42 +7,53 @@ 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. 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);