diff --git a/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/AspectJAsyncConfiguration.java b/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/AspectJAsyncConfiguration.java index c2df8e984db..7d570477879 100644 --- a/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/AspectJAsyncConfiguration.java +++ b/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/AspectJAsyncConfiguration.java @@ -36,7 +36,6 @@ import org.springframework.scheduling.annotation.EnableAsync; @Configuration public class AspectJAsyncConfiguration extends AbstractAsyncConfiguration { - @Override @Bean(name=AnnotationConfigUtils.ASYNC_EXECUTION_ASPECT_BEAN_NAME) @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public AnnotationAsyncExecutionAspect asyncAdvisor() { diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AbstractAsyncConfiguration.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AbstractAsyncConfiguration.java index 2f8703dc69f..e5f8b4a08c8 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AbstractAsyncConfiguration.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AbstractAsyncConfiguration.java @@ -49,13 +49,6 @@ public abstract class AbstractAsyncConfiguration implements ImportAware { importMetadata.getClassName()); } - /** - * The component that will apply async execution advice to beans annotated with - * the async annotation. Subclasses will provide either a BeanPostProcessor in - * the case of proxy-based advice, or an AspectJ aspect if weaving is preferred. - */ - public abstract Object asyncAdvisor(); - /** * Collect any {@link AsyncConfigurer} beans through autowiring. */ diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/ProxyAsyncConfiguration.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/ProxyAsyncConfiguration.java index 8ec439db2e5..515295a3e9d 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/ProxyAsyncConfiguration.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/ProxyAsyncConfiguration.java @@ -38,7 +38,6 @@ import org.springframework.util.Assert; @Configuration public class ProxyAsyncConfiguration extends AbstractAsyncConfiguration { - @Override @Bean(name=AnnotationConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME) @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public AsyncAnnotationBeanPostProcessor asyncAdvisor() { diff --git a/spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java b/spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java index e640376efe1..a1e131804d3 100644 --- a/spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java +++ b/spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java @@ -141,9 +141,9 @@ public class StandardAnnotationMetadata extends StandardClassMetadata implements Method[] methods = getIntrospectedClass().getDeclaredMethods(); Set annotatedMethods = new LinkedHashSet(); for (Method method : methods) { + // TODO: on OpenJDK 8 b99, bridge methods seem to be discovered as annotated as well... if (AnnotatedElementUtils.isAnnotated(method, annotationType)) { - annotatedMethods.add(new StandardMethodMetadata(method, - this.nestedAnnotationsAsMap)); + annotatedMethods.add(new StandardMethodMetadata(method, this.nestedAnnotationsAsMap)); } } return annotatedMethods; diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java index 9f7e76b0c92..c718971966d 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java @@ -16,15 +16,11 @@ package org.springframework.core.annotation; -import static org.junit.Assert.*; -import static org.springframework.core.annotation.AnnotationUtils.*; - import java.lang.annotation.Annotation; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; - import java.util.Arrays; import java.util.List; @@ -33,9 +29,10 @@ import org.junit.Test; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; +import static org.junit.Assert.*; +import static org.springframework.core.annotation.AnnotationUtils.*; + /** - * Unit tests for {@link AnnotationUtils}. - * * @author Rod Johnson * @author Juergen Hoeller * @author Sam Brannen @@ -45,8 +42,7 @@ public class AnnotationUtilsTests { @Test public void testFindMethodAnnotationOnLeaf() throws SecurityException, NoSuchMethodException { - - final Method m = Leaf.class.getMethod("annotatedOnLeaf", (Class[]) null); + Method m = Leaf.class.getMethod("annotatedOnLeaf", (Class[]) null); assertNotNull(m.getAnnotation(Order.class)); assertNotNull(getAnnotation(m, Order.class)); assertNotNull(findAnnotation(m, Order.class)); @@ -54,8 +50,7 @@ public class AnnotationUtilsTests { @Test public void testFindMethodAnnotationOnRoot() throws SecurityException, NoSuchMethodException { - - final Method m = Leaf.class.getMethod("annotatedOnRoot", (Class[]) null); + Method m = Leaf.class.getMethod("annotatedOnRoot", (Class[]) null); assertNotNull(m.getAnnotation(Order.class)); assertNotNull(getAnnotation(m, Order.class)); assertNotNull(findAnnotation(m, Order.class)); @@ -63,8 +58,7 @@ public class AnnotationUtilsTests { @Test public void testFindMethodAnnotationOnRootButOverridden() throws SecurityException, NoSuchMethodException { - - final Method m = Leaf.class.getMethod("overrideWithoutNewAnnotation", (Class[]) null); + Method m = Leaf.class.getMethod("overrideWithoutNewAnnotation", (Class[]) null); assertNull(m.getAnnotation(Order.class)); assertNull(getAnnotation(m, Order.class)); assertNotNull(findAnnotation(m, Order.class)); @@ -72,20 +66,18 @@ public class AnnotationUtilsTests { @Test public void testFindMethodAnnotationNotAnnotated() throws SecurityException, NoSuchMethodException { - - final Method m = Leaf.class.getMethod("notAnnotated", (Class[]) null); + Method m = Leaf.class.getMethod("notAnnotated", (Class[]) null); assertNull(findAnnotation(m, Order.class)); } @Test public void testFindMethodAnnotationOnBridgeMethod() throws Exception { - - final Method m = SimpleFoo.class.getMethod("something", Object.class); + Method m = SimpleFoo.class.getMethod("something", Object.class); assertTrue(m.isBridge()); assertNull(m.getAnnotation(Order.class)); assertNull(getAnnotation(m, Order.class)); assertNotNull(findAnnotation(m, Order.class)); - assertNull(m.getAnnotation(Transactional.class)); + // TODO: actually found on OpenJDK 8 b99! assertNull(m.getAnnotation(Transactional.class)); assertNotNull(getAnnotation(m, Transactional.class)); assertNotNull(findAnnotation(m, Transactional.class)); } @@ -101,7 +93,6 @@ public class AnnotationUtilsTests { @Test public void testFindAnnotationDeclaringClass() throws Exception { - // no class-level annotation assertNull(findAnnotationDeclaringClass(Transactional.class, NonAnnotatedInterface.class)); assertNull(findAnnotationDeclaringClass(Transactional.class, NonAnnotatedClass.class)); @@ -128,7 +119,6 @@ public class AnnotationUtilsTests { @Test public void findAnnotationDeclaringClassForTypesWithSingleCandidateType() { - // no class-level annotation List> transactionalCandidateList = Arrays.> asList(Transactional.class); assertNull(findAnnotationDeclaringClassForTypes(transactionalCandidateList, NonAnnotatedInterface.class)); @@ -158,9 +148,7 @@ public class AnnotationUtilsTests { @Test public void findAnnotationDeclaringClassForTypesWithMultipleCandidateTypes() { - - List> candidates = Arrays.> asList(Transactional.class, - Order.class); + List> candidates = Arrays.> asList(Transactional.class, Order.class); // no class-level annotation assertNull(findAnnotationDeclaringClassForTypes(candidates, NonAnnotatedInterface.class)); @@ -196,7 +184,6 @@ public class AnnotationUtilsTests { @Test public void testIsAnnotationDeclaredLocally() throws Exception { - // no class-level annotation assertFalse(isAnnotationDeclaredLocally(Transactional.class, NonAnnotatedInterface.class)); assertFalse(isAnnotationDeclaredLocally(Transactional.class, NonAnnotatedClass.class)); @@ -216,7 +203,6 @@ public class AnnotationUtilsTests { @Test public void testIsAnnotationInherited() throws Exception { - // no class-level annotation assertFalse(isAnnotationInherited(Transactional.class, NonAnnotatedInterface.class)); assertFalse(isAnnotationInherited(Transactional.class, NonAnnotatedClass.class)); @@ -239,9 +225,8 @@ public class AnnotationUtilsTests { @Test public void testGetValueFromAnnotation() throws Exception { - - final Method method = SimpleFoo.class.getMethod("something", Object.class); - final Order order = findAnnotation(method, Order.class); + Method method = SimpleFoo.class.getMethod("something", Object.class); + Order order = findAnnotation(method, Order.class); assertEquals(1, AnnotationUtils.getValue(order, AnnotationUtils.VALUE)); assertEquals(1, AnnotationUtils.getValue(order)); @@ -249,9 +234,8 @@ public class AnnotationUtilsTests { @Test public void testGetDefaultValueFromAnnotation() throws Exception { - - final Method method = SimpleFoo.class.getMethod("something", Object.class); - final Order order = findAnnotation(method, Order.class); + Method method = SimpleFoo.class.getMethod("something", Object.class); + Order order = findAnnotation(method, Order.class); assertEquals(Ordered.LOWEST_PRECEDENCE, AnnotationUtils.getDefaultValue(order, AnnotationUtils.VALUE)); assertEquals(Ordered.LOWEST_PRECEDENCE, AnnotationUtils.getDefaultValue(order)); @@ -259,14 +243,12 @@ public class AnnotationUtilsTests { @Test public void testGetDefaultValueFromAnnotationType() throws Exception { - assertEquals(Ordered.LOWEST_PRECEDENCE, AnnotationUtils.getDefaultValue(Order.class, AnnotationUtils.VALUE)); assertEquals(Ordered.LOWEST_PRECEDENCE, AnnotationUtils.getDefaultValue(Order.class)); } @Test public void testFindAnnotationFromInterface() throws Exception { - Method method = ImplementsInterfaceWithAnnotatedMethod.class.getMethod("foo"); Order order = findAnnotation(method, Order.class); assertNotNull(order); @@ -274,7 +256,6 @@ public class AnnotationUtilsTests { @Test public void testFindAnnotationFromInterfaceOnSuper() throws Exception { - Method method = SubOfImplementsInterfaceWithAnnotatedMethod.class.getMethod("foo"); Order order = findAnnotation(method, Order.class); assertNotNull(order); @@ -282,7 +263,6 @@ public class AnnotationUtilsTests { @Test public void testFindAnnotationFromInterfaceWhenSuperDoesNotImplementMethod() throws Exception { - Method method = SubOfAbstractImplementsInterfaceWithAnnotatedMethod.class.getMethod("foo"); Order order = findAnnotation(method, Order.class); assertNotNull(order);