diff --git a/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/AnnotationDrivenBeanDefinitionParserTests.java b/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/AnnotationDrivenBeanDefinitionParserTests.java new file mode 100644 index 00000000000..4b609c6e2c8 --- /dev/null +++ b/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/AnnotationDrivenBeanDefinitionParserTests.java @@ -0,0 +1,69 @@ +/* + * Copyright 2002-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.scheduling.aspectj; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import org.springframework.beans.DirectFieldAccessor; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.scheduling.config.TaskManagementConfigUtils; + +import static org.junit.Assert.*; + +/** + * @author Stephane Nicoll + */ +public class AnnotationDrivenBeanDefinitionParserTests { + + private ConfigurableApplicationContext context; + + @Before + public void setup() { + this.context = new ClassPathXmlApplicationContext( + "annotationDrivenContext.xml", AnnotationDrivenBeanDefinitionParserTests.class); + } + + @After + public void after() { + if (this.context != null) { + this.context.close(); + } + } + + @Test + public void asyncAspectRegistered() { + assertTrue(context.containsBean(TaskManagementConfigUtils.ASYNC_EXECUTION_ASPECT_BEAN_NAME)); + } + + @Test + public void asyncPostProcessorExecutorReference() { + Object executor = context.getBean("testExecutor"); + Object aspect = context.getBean(TaskManagementConfigUtils.ASYNC_EXECUTION_ASPECT_BEAN_NAME); + assertSame(executor, new DirectFieldAccessor(aspect).getPropertyValue("defaultExecutor")); + } + + @Test + public void asyncPostProcessorExceptionHandlerReference() { + Object exceptionHandler = context.getBean("testExceptionHandler"); + Object aspect = context.getBean(TaskManagementConfigUtils.ASYNC_EXECUTION_ASPECT_BEAN_NAME); + assertSame(exceptionHandler, new DirectFieldAccessor(aspect).getPropertyValue("exceptionHandler")); + } + +} diff --git a/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/annotationDrivenContext.xml b/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/annotationDrivenContext.xml new file mode 100644 index 00000000000..635c1660249 --- /dev/null +++ b/spring-aspects/src/test/java/org/springframework/scheduling/aspectj/annotationDrivenContext.xml @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/spring-context/src/main/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParser.java index 0e147f5f317..f70b84066ee 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -115,6 +115,10 @@ public class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParse if (StringUtils.hasText(executor)) { builder.addPropertyReference("executor", executor); } + String exceptionHandler = element.getAttribute("exception-handler"); + if (StringUtils.hasText(exceptionHandler)) { + builder.addPropertyReference("exceptionHandler", exceptionHandler); + } parserContext.registerBeanComponent(new BeanComponentDefinition(builder.getBeanDefinition(), TaskManagementConfigUtils.ASYNC_EXECUTION_ASPECT_BEAN_NAME)); } diff --git a/spring-context/src/test/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParserTests.java b/spring-context/src/test/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParserTests.java index da310b92e79..d9a997d1fbb 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParserTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/config/AnnotationDrivenBeanDefinitionParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import static org.junit.Assert.*; /** * @author Mark Fisher + * @author Stephane Nicoll */ public class AnnotationDrivenBeanDefinitionParserTests { @@ -64,4 +65,11 @@ public class AnnotationDrivenBeanDefinitionParserTests { assertSame(scheduler, new DirectFieldAccessor(postProcessor).getPropertyValue("scheduler")); } + @Test + public void asyncPostProcessorExceptionHandlerReference() { + Object exceptionHandler = context.getBean("testExceptionHandler"); + Object postProcessor = context.getBean(TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME); + assertSame(exceptionHandler, new DirectFieldAccessor(postProcessor).getPropertyValue("exceptionHandler")); + } + } diff --git a/spring-context/src/test/resources/org/springframework/scheduling/config/annotationDrivenContext.xml b/spring-context/src/test/resources/org/springframework/scheduling/config/annotationDrivenContext.xml index 72ca66bf391..d12eb6f1d6b 100644 --- a/spring-context/src/test/resources/org/springframework/scheduling/config/annotationDrivenContext.xml +++ b/spring-context/src/test/resources/org/springframework/scheduling/config/annotationDrivenContext.xml @@ -7,10 +7,14 @@ http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> - + + +