Some of the @ManagementContextConfiguration
classes are explicitly marked as proxyBeanMethods = false
and some are not (e.g. WebMvcEndpointChildContextConfiguration
). It seems like Spring doesn't recognize this in a meta-annotation, so it's probably a bug not to declare it explicitly:
Class<WebMvcEndpointChildContextConfiguration> type = WebMvcEndpointChildContextConfiguration.class;
String name = Configuration.class.getName();
System.err.println(new SimpleMetadataReaderFactory().getMetadataReader(type.getName()).getAnnotationMetadata()
.getAllAnnotationAttributes(name).get("proxyBeanMethods"));
System.err.println(new SimpleMetadataReaderFactory().getMetadataReader(type.getName()).getAnnotationMetadata()
.getAnnotationAttributes(name).get("proxyBeanMethods"));
System.err.println(
AnnotatedElementUtils.getMergedAnnotationAttributes(type, name, true, true).get("proxyBeanMethods"));
System.err.println(
AnnotatedElementUtils.findMergedAnnotationAttributes(type, name, true, true).get("proxyBeanMethods"));
prints
[false]
true
true
true
The code path in Spring is the second one (I think), via ConfigurationClassUtils
.
Comment From: philwebb
See #9068 for the initial change
Comment From: wilkinsona
I think this should be treated as a bug as the current arrangement doesn't really make sense. We've got proxyBeanMethods=false
on a @Configuration
meta-annotation, but we also have a proxyBeanMethods
attribute on @ManagementContextConfiguration
that's an alias for the attribute on @Configuration
. The attribute on the meta-annotation should be removed in favour of the aliased attribute.