Merge branch '6.2.x'
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.context.annotation;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -28,6 +29,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.BeanDefinitionStoreException;
|
||||
import org.springframework.beans.factory.BeanRegistrar;
|
||||
import org.springframework.beans.factory.ListableBeanFactory;
|
||||
@@ -290,8 +292,8 @@ class ConfigurationClassBeanDefinitionReader {
|
||||
}
|
||||
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace(String.format("Registering bean definition for @Bean method %s.%s()",
|
||||
configClass.getMetadata().getClassName(), beanName));
|
||||
logger.trace("Registering bean definition for @Bean method %s.%s()"
|
||||
.formatted(configClass.getMetadata().getClassName(), beanName));
|
||||
}
|
||||
this.registry.registerBeanDefinition(beanName, beanDefToRegister);
|
||||
}
|
||||
@@ -351,9 +353,8 @@ class ConfigurationClassBeanDefinitionReader {
|
||||
"@Bean definition illegally overridden by existing bean definition: " + existingBeanDef);
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(String.format("Skipping bean definition for %s: a definition for bean '%s' " +
|
||||
"already exists. This top-level bean definition is considered as an override.",
|
||||
beanMethod, beanName));
|
||||
logger.debug("Skipping bean definition for %s: a definition for bean '%s' already exists. " +
|
||||
"This top-level bean definition is considered as an override.".formatted(beanMethod, beanName));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -379,9 +380,11 @@ class ConfigurationClassBeanDefinitionReader {
|
||||
BeanDefinitionReader reader = readerInstanceCache.get(readerClass);
|
||||
if (reader == null) {
|
||||
try {
|
||||
Constructor<? extends BeanDefinitionReader> constructor =
|
||||
readerClass.getDeclaredConstructor(BeanDefinitionRegistry.class);
|
||||
// Instantiate the specified BeanDefinitionReader
|
||||
reader = readerClass.getConstructor(BeanDefinitionRegistry.class).newInstance(this.registry);
|
||||
// Delegate the current ResourceLoader to it if possible
|
||||
reader = BeanUtils.instantiateClass(constructor, this.registry);
|
||||
// Delegate the current ResourceLoader and Environment to it if possible
|
||||
if (reader instanceof AbstractBeanDefinitionReader abdr) {
|
||||
abdr.setResourceLoader(this.resourceLoader);
|
||||
abdr.setEnvironment(this.environment);
|
||||
@@ -390,11 +393,9 @@ class ConfigurationClassBeanDefinitionReader {
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
throw new IllegalStateException(
|
||||
"Could not instantiate BeanDefinitionReader class [" + readerClass.getName() + "]");
|
||||
"Could not instantiate BeanDefinitionReader class [" + readerClass.getName() + "]", ex);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO SPR-6310: qualify relative path locations as done in AbstractContextLoader.modifyLocations
|
||||
reader.loadBeanDefinitions(resource);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -29,14 +29,15 @@ import org.springframework.core.annotation.AliasFor;
|
||||
* Indicates one or more resources containing bean definitions to import.
|
||||
*
|
||||
* <p>Like {@link Import @Import}, this annotation provides functionality similar to
|
||||
* the {@code <import/>} element in Spring XML. It is typically used when designing
|
||||
* {@link Configuration @Configuration} classes to be bootstrapped by an
|
||||
* {@link AnnotationConfigApplicationContext}, but where some XML functionality such
|
||||
* as namespaces is still necessary.
|
||||
* the {@code <import/>} element in Spring XML configuration. It is typically used
|
||||
* when designing {@link Configuration @Configuration} classes to be bootstrapped by
|
||||
* an {@link AnnotationConfigApplicationContext}, but where some XML functionality
|
||||
* such as namespaces is still necessary.
|
||||
*
|
||||
* <p>By default, arguments to the {@link #value} attribute will be processed using a
|
||||
* <p>By default, arguments to the {@link #locations() locations} or {@link #value() value}
|
||||
* attribute will be processed using a
|
||||
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader GroovyBeanDefinitionReader}
|
||||
* if ending in {@code ".groovy"}; otherwise, an
|
||||
* for resource locations ending in {@code ".groovy"}; otherwise, an
|
||||
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader XmlBeanDefinitionReader}
|
||||
* will be used to parse Spring {@code <beans/>} XML files. Optionally, the {@link #reader}
|
||||
* attribute may be declared, allowing the user to choose a custom {@link BeanDefinitionReader}
|
||||
@@ -77,12 +78,19 @@ public @interface ImportResource {
|
||||
|
||||
/**
|
||||
* {@link BeanDefinitionReader} implementation to use when processing
|
||||
* resources specified via the {@link #value} attribute.
|
||||
* resources specified via the {@link #locations() locations} or
|
||||
* {@link #value() value} attribute.
|
||||
* <p>The configured {@code BeanDefinitionReader} type must declare a
|
||||
* constructor that accepts a single
|
||||
* {@link org.springframework.beans.factory.support.BeanDefinitionRegistry
|
||||
* BeanDefinitionRegistry} argument.
|
||||
* <p>By default, the reader will be adapted to the resource path specified:
|
||||
* {@code ".groovy"} files will be processed with a
|
||||
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader GroovyBeanDefinitionReader};
|
||||
* whereas, all other resources will be processed with an
|
||||
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader XmlBeanDefinitionReader}.
|
||||
* {@link org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader
|
||||
* GroovyBeanDefinitionReader}; whereas, all other resources will be processed
|
||||
* with an {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader
|
||||
* XmlBeanDefinitionReader}.
|
||||
* @see #locations
|
||||
* @see #value
|
||||
*/
|
||||
Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class;
|
||||
|
||||
Reference in New Issue
Block a user