Add AotServices class to replace AotFactoriesLoader
Add an `AotServices` class to replace `AotFactoriesLoader`. The replacement class allow instances to be loaded from just the `aot.factories` file if required. It also retains a link to the bean names so that a `findByBeanName(...)` method can be provided. See gh-28833
This commit is contained in:
@@ -21,7 +21,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.aot.generate.GenerationContext;
|
||||
import org.springframework.beans.factory.aot.AotFactoriesLoader;
|
||||
import org.springframework.beans.factory.aot.AotServices;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationCode;
|
||||
@@ -41,19 +41,19 @@ class BeanFactoryInitializationAotContributions {
|
||||
|
||||
|
||||
BeanFactoryInitializationAotContributions(DefaultListableBeanFactory beanFactory) {
|
||||
this(beanFactory, new AotFactoriesLoader(beanFactory));
|
||||
this(beanFactory, AotServices.factoriesAndBeans(beanFactory));
|
||||
}
|
||||
|
||||
BeanFactoryInitializationAotContributions(DefaultListableBeanFactory beanFactory,
|
||||
AotFactoriesLoader loader) {
|
||||
AotServices.Loader loader) {
|
||||
this.contributions = getContributions(beanFactory, getProcessors(loader));
|
||||
}
|
||||
|
||||
|
||||
private List<BeanFactoryInitializationAotProcessor> getProcessors(
|
||||
AotFactoriesLoader loader) {
|
||||
private static List<BeanFactoryInitializationAotProcessor> getProcessors(
|
||||
AotServices.Loader loader) {
|
||||
List<BeanFactoryInitializationAotProcessor> processors = new ArrayList<>(
|
||||
loader.load(BeanFactoryInitializationAotProcessor.class));
|
||||
loader.load(BeanFactoryInitializationAotProcessor.class).asList());
|
||||
processors.add(new RuntimeHintsBeanFactoryInitializationAotProcessor());
|
||||
return Collections.unmodifiableList(processors);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import org.springframework.aot.generate.GenerationContext;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.aot.AotFactoriesLoader;
|
||||
import org.springframework.beans.factory.aot.AotServices;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationCode;
|
||||
@@ -56,9 +56,8 @@ class RuntimeHintsBeanFactoryInitializationAotProcessor
|
||||
@Override
|
||||
public BeanFactoryInitializationAotContribution processAheadOfTime(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
AotFactoriesLoader loader = new AotFactoriesLoader(beanFactory);
|
||||
Map<Class<? extends RuntimeHintsRegistrar>, RuntimeHintsRegistrar> registrars = loader
|
||||
.load(RuntimeHintsRegistrar.class).stream()
|
||||
Map<Class<? extends RuntimeHintsRegistrar>, RuntimeHintsRegistrar> registrars = AotServices
|
||||
.factoriesAndBeans(beanFactory).load(RuntimeHintsRegistrar.class).stream()
|
||||
.collect(LinkedHashMap::new, (map, item) -> map.put(item.getClass(), item), Map::putAll);
|
||||
extractFromBeanFactory(beanFactory).forEach(registrarClass ->
|
||||
registrars.computeIfAbsent(registrarClass, BeanUtils::instantiateClass));
|
||||
|
||||
Reference in New Issue
Block a user