Repository: struts Updated Branches: refs/heads/develop 52481bd56 -> ae324c981
WW-4110 Adds special flag to use different logic when creating AOP beans Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ae324c98 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ae324c98 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ae324c98 Branch: refs/heads/develop Commit: ae324c98119ecc44041f40fcb5828773c4f72e33 Parents: 52481bd Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Wed Aug 6 20:21:25 2014 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Wed Aug 6 20:21:25 2014 +0200 ---------------------------------------------------------------------- .../java/org/apache/struts2/StrutsConstants.java | 3 +++ .../resources/org/apache/struts2/default.properties | 5 +++++ .../struts2/spring/StrutsSpringObjectFactory.java | 3 +++ .../spring/StrutsSpringObjectFactoryTest.java | 4 ++-- .../xwork2/spring/SpringObjectFactory.java | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/core/src/main/java/org/apache/struts2/StrutsConstants.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 7676f4c..03287d6 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -155,6 +155,9 @@ public final class StrutsConstants { /** Whether Spring should use its class cache or not */ public static final String STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE = "struts.objectFactory.spring.useClassCache"; + /** Uses different logic to construct beans, see https://issues.apache.org/jira/browse/WW-4110 */ + public static final String STRUTS_OBJECTFACTORY_SPRING_ENABLE_AOP_SUPPORT = "struts.objectFactory.spring.enableAopSupport"; + /** Whether or not XSLT templates should not be cached */ public static final String STRUTS_XSLT_NOCACHE = "struts.xslt.nocache"; http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/core/src/main/resources/org/apache/struts2/default.properties ---------------------------------------------------------------------- diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties index df3e1d4..5618666 100644 --- a/core/src/main/resources/org/apache/struts2/default.properties +++ b/core/src/main/resources/org/apache/struts2/default.properties @@ -47,6 +47,11 @@ struts.objectFactory.spring.useClassCache = true ### valid values are: true, false (false is the default) struts.objectFactory.spring.autoWire.alwaysRespect = false +### By default SpringObjectFactory doesn't support AOP +### This flag was added just temporally to check if nothing is broken +### See https://issues.apache.org/jira/browse/WW-4110 +struts.objectFactory.spring.enableAopSupport = false + ### if specified, the default object type determiner can be overridden here ### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger" ### Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java ---------------------------------------------------------------------- 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 a5ad82d..d95830a 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 @@ -67,6 +67,7 @@ public class StrutsSpringObjectFactory extends SpringObjectFactory { @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(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_ENABLE_AOP_SUPPORT,required=false) String enableAopSupport, @Inject ServletContext servletContext, @Inject(StrutsConstants.STRUTS_DEVMODE) String devMode, @Inject Container container) { @@ -141,6 +142,8 @@ public class StrutsSpringObjectFactory extends SpringObjectFactory { this.setAlwaysRespectAutowireStrategy("true".equalsIgnoreCase(alwaysAutoWire)); + this.setEnableAopSupport(enableAopSupport); + if (LOG.isInfoEnabled()) { LOG.info("... initialized Struts-Spring integration successfully"); } http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java ---------------------------------------------------------------------- diff --git a/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java b/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java index 0bb7294..92ce5a4 100644 --- a/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java +++ b/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java @@ -45,7 +45,7 @@ public class StrutsSpringObjectFactoryTest extends TestCase { Container container = EasyMock.createNiceMock(Container.class); EasyMock.replay(container); - StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, null, null, new MockServletContext(), null, container); + StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, null, null, null, new MockServletContext(), null, container); assertEquals(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, fac.getAutowireStrategy()); } @@ -60,7 +60,7 @@ public class StrutsSpringObjectFactoryTest extends TestCase { ac.setServletContext(msc); ac.setConfigLocations(new String[] {"org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml"}); ac.refresh(); - StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory("constructor", null, null, msc, null, container); + StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory("constructor", null, null, null, msc, null, container); assertEquals(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, fac.getAutowireStrategy()); } http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java ---------------------------------------------------------------------- diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java b/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java index 9ba065d..56f6b53 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java @@ -47,6 +47,11 @@ public class SpringObjectFactory extends ObjectFactory implements ApplicationCon private final Map<String, Object> classes = new HashMap<String, Object>(); private boolean useClassCache = true; private boolean alwaysRespectAutowireStrategy = false; + /** + * This is temporary solution, after validating can be removed + * @since 2.3.18 + */ + private boolean enableAopSupport = false; @Inject(value="applicationContextPath",required=false) public void setApplicationContextPath(String ctx) { @@ -55,6 +60,11 @@ public class SpringObjectFactory extends ObjectFactory implements ApplicationCon } } + @Inject(value = "enableAopSupport", required = false) + public void setEnableAopSupport(String enableAopSupport) { + this.enableAopSupport = Boolean.parseBoolean(enableAopSupport); + } + /** * Set the Spring ApplicationContext that should be used to look beans up with. * @@ -175,6 +185,11 @@ public class SpringObjectFactory extends ObjectFactory implements ApplicationCon bean = autoWiringFactory.createBean(clazz, autowireStrategy, false); injectApplicationContext(bean); return injectInternalBeans(bean); + } else if (enableAopSupport) { + bean = autoWiringFactory.createBean(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false); + bean = autoWireBean(bean, autoWiringFactory); + bean = autoWiringFactory.initializeBean(bean, bean.getClass().getName()); + return bean; } else { bean = autoWiringFactory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false); bean = autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, bean.getClass().getName());