Description
Sam Brannen opened SPR-11108 and commented
Status Quo
The findAnnotation()
methods in AnnotationUtils
currently support searching for meta-annotations declared on composed annotations that are declared on interfaces; however, various parts of the framework -- for example, code that relies on AnnotationAttributes
- only support composed annotations on classes or methods (not on interfaces or interface methods).
For example, given the following:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(rollbackFor=Exception.class, noRollbackFor={IOException.class})
public @interface TxWithAttribute {
boolean readOnly();
}
@TxWithAttribute(readOnly = true)
public static interface TestInterface9 {
public int getAge();
}
public static class TestBean9 implements TestInterface9 {
@Override
public int getAge() {
return 10;
}
}
public static interface TestInterface10 {
@TxWithAttribute(readOnly=true)
public int getAge();
}
public static class TestBean10 implements TestInterface10 {
@Override
public int getAge() {
return 10;
}
}
Spring's support for resolving transaction attributes (e.g., the AbstractFallbackTransactionAttributeSource.computeTransactionAttribute()
to SpringTransactionAnnotationParser.parseTransactionAnnotation()
call stack) fails to find @Transactional
which is declared via @TxWithAttribute
on interfaces.
Proposal
Introduce support for composable stereotype annotations declared on interfaces.
Affects: 4.0 RC1
Issue Links:
- Allow meta-annotations to override attributes from their parent [SPR-10181] #14814
- Provide meta-annotation support for test-related annotations [SPR-7827] #12483
- Support meta-annotation attribute overrides in the TestContext framework [SPR-11038] #15666
- AnnotatedElementUtils does not find annotations on methods in dynamic proxies [SPR-12703] #17300
- AnnotatedElementUtils fails to find annotations on abstract, bridge, or interface methods [SPR-12738] #17335
1 votes, 3 watchers