\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
}\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