Skip to content

Commit c16a298

Browse files
committed
Add bean definition attribute for 'notLite' to skip @bean detection
See https://jira.spring.io/browse/SPR-17412
1 parent 1621125 commit c16a298

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

Diff for: spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java

+9
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.springframework.beans.factory.support.RootBeanDefinition;
4545
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
4646
import org.springframework.context.annotation.ConfigurationCondition.ConfigurationPhase;
47+
import org.springframework.core.Conventions;
4748
import org.springframework.core.annotation.AnnotationAttributes;
4849
import org.springframework.core.env.Environment;
4950
import org.springframework.core.io.Resource;
@@ -70,6 +71,10 @@
7071
*/
7172
class ConfigurationClassBeanDefinitionReader {
7273

74+
private static final String NOT_LITE_ATTRIBUTE = Conventions
75+
.getQualifiedAttributeName(ConfigurationClassPostProcessor.class,
76+
"notLite");
77+
7378
private static final Log logger = LogFactory.getLog(ConfigurationClassBeanDefinitionReader.class);
7479

7580
private static final ScopeMetadataResolver scopeMetadataResolver = new AnnotationScopeMetadataResolver();
@@ -151,6 +156,9 @@ private void loadBeanDefinitionsForConfigurationClass(
151156
private void registerBeanDefinitionForImportedConfigurationClass(ConfigurationClass configClass) {
152157
AnnotationMetadata metadata = configClass.getMetadata();
153158
AnnotatedGenericBeanDefinition configBeanDef = new AnnotatedGenericBeanDefinition(metadata);
159+
if (metadata.hasMetaAnnotation(Configuration.class.getName())) {
160+
configBeanDef.setAttribute(NOT_LITE_ATTRIBUTE, true);
161+
}
154162

155163
ScopeMetadata scopeMetadata = scopeMetadataResolver.resolveScopeMetadata(configBeanDef);
156164
configBeanDef.setScope(scopeMetadata.getScopeName());
@@ -271,6 +279,7 @@ private void loadBeanDefinitionsForBeanMethod(BeanMethod beanMethod) {
271279
logger.trace(String.format("Registering bean definition for @Bean method %s.%s()",
272280
configClass.getMetadata().getClassName(), beanName));
273281
}
282+
beanDefToRegister.setAttribute(NOT_LITE_ATTRIBUTE, true);
274283
this.registry.registerBeanDefinition(beanName, beanDefToRegister);
275284
}
276285

Diff for: spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ private void processMemberClasses(ConfigurationClass configClass, SourceClass so
345345
if (!memberClasses.isEmpty()) {
346346
List<SourceClass> candidates = new ArrayList<>(memberClasses.size());
347347
for (SourceClass memberClass : memberClasses) {
348-
if (ConfigurationClassUtils.isConfigurationCandidate(memberClass.getMetadata()) &&
348+
if (ConfigurationClassUtils.isFullConfigurationCandidate(memberClass.getMetadata()) &&
349349
!memberClass.getMetadata().getClassName().equals(configClass.getMetadata().getClassName())) {
350350
candidates.add(memberClass);
351351
}

Diff for: spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ abstract class ConfigurationClassUtils {
5151

5252
private static final String CONFIGURATION_CLASS_LITE = "lite";
5353

54+
private static final String CONFIGURATION_CLASS_NOT_LITE = Conventions
55+
.getQualifiedAttributeName(ConfigurationClassPostProcessor.class, "notLite");
56+
5457
private static final String CONFIGURATION_CLASS_ATTRIBUTE =
5558
Conventions.getQualifiedAttributeName(ConfigurationClassPostProcessor.class, "configurationClass");
5659

5760
private static final String ORDER_ATTRIBUTE =
5861
Conventions.getQualifiedAttributeName(ConfigurationClassPostProcessor.class, "order");
5962

60-
6163
private static final Log logger = LogFactory.getLog(ConfigurationClassUtils.class);
6264

6365
private static final Set<String> candidateIndicators = new HashSet<>(8);
@@ -115,7 +117,9 @@ else if (beanDef instanceof AbstractBeanDefinition && ((AbstractBeanDefinition)
115117
if (isFullConfigurationCandidate(metadata)) {
116118
beanDef.setAttribute(CONFIGURATION_CLASS_ATTRIBUTE, CONFIGURATION_CLASS_FULL);
117119
}
118-
else if (isLiteConfigurationCandidate(metadata)) {
120+
else if (beanDef.getRole() != BeanDefinition.ROLE_INFRASTRUCTURE
121+
&& beanDef.getAttribute(CONFIGURATION_CLASS_NOT_LITE) == null
122+
&& isLiteConfigurationCandidate(metadata)) {
119123
beanDef.setAttribute(CONFIGURATION_CLASS_ATTRIBUTE, CONFIGURATION_CLASS_LITE);
120124
}
121125
else {

0 commit comments

Comments
 (0)