diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 6fbca3c15..fb4b0012d 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -118,9 +118,15 @@ public final class StrutsConstants { */ public static final String STRUTS_MULTIPART_PARSER = "struts.multipart.parser"; - /** Whether Spring should autoWire or not */ + /** How Spring should autowire. Valid values are 'name', 'type', 'auto', and 'constructor' */ public static final String STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE = "struts.objectFactory.spring.autoWire"; + /** Whether the autowire strategy chosen by STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE is always respected. Defaults + * to false, which is the legacy behavior that tries to determine the best strategy for the situation. + * @since 2.1.3 + */ + public static final String STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT = "struts.objectFactory.spring.autoWire.alwaysRespect"; + /** Whether Spring should use its class cache or not */ public static final String STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE = "struts.objectFactory.spring.useClassCache"; diff --git a/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java b/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java index 0a9ee9031..3edb39fb4 100644 --- a/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java +++ b/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java @@ -50,6 +50,23 @@ public class StrutsSpringObjectFactory extends SpringObjectFactory { @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE,required=false) String autoWire, @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE,required=false) String useClassCacheStr, @Inject ServletContext servletContext) { + this(autoWire, "false", useClassCacheStr, servletContext); + } + + /** + * Constructs the spring object factory + * @param autoWire The type of autowiring to use + * @param alwaysAutoWire Whether to always respect the autowiring or not + * @param useClassCacheStr Whether to use the class cache or not + * @param servletContext The servlet context + * @since 2.1.3 + */ + @Inject + public StrutsSpringObjectFactory( + @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE,required=false) String autoWire, + @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT,required=false) String alwaysAutoWire, + @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE,required=false) String useClassCacheStr, + @Inject ServletContext servletContext) { super(); boolean useClassCache = "true".equals(useClassCacheStr); @@ -85,6 +102,8 @@ public class StrutsSpringObjectFactory extends SpringObjectFactory { this.setUseClassCache(useClassCache); + this.setAlwaysRespectAutowireStrategy("true".equalsIgnoreCase(alwaysAutoWire)); + LOG.info("... initialized Struts-Spring integration successfully"); } }