AbstractDependsOnBeanFactoryPostProcessor Class — spring-boot Architecture
Architecture documentation for the AbstractDependsOnBeanFactoryPostProcessor class in AbstractDependsOnBeanFactoryPostProcessor.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AbstractDependsOnBeanFactoryPostProcessor.java lines 51–151
public abstract class AbstractDependsOnBeanFactoryPostProcessor implements BeanFactoryPostProcessor, Ordered {
private final Class<?> beanClass;
private final @Nullable Class<? extends FactoryBean<?>> factoryBeanClass;
private final Function<ListableBeanFactory, Set<String>> dependsOn;
/**
* Create an instance with target bean, factory bean classes, and dependency names.
* @param beanClass target bean class
* @param factoryBeanClass target factory bean class
* @param dependsOn dependency names
*/
protected AbstractDependsOnBeanFactoryPostProcessor(Class<?> beanClass,
@Nullable Class<? extends FactoryBean<?>> factoryBeanClass, String... dependsOn) {
this.beanClass = beanClass;
this.factoryBeanClass = factoryBeanClass;
this.dependsOn = (beanFactory) -> new HashSet<>(Arrays.asList(dependsOn));
}
/**
* Create an instance with target bean, factory bean classes, and dependency types.
* @param beanClass target bean class
* @param factoryBeanClass target factory bean class
* @param dependencyTypes dependency types
* @since 2.1.7
*/
protected AbstractDependsOnBeanFactoryPostProcessor(Class<?> beanClass,
@Nullable Class<? extends FactoryBean<?>> factoryBeanClass, Class<?>... dependencyTypes) {
this.beanClass = beanClass;
this.factoryBeanClass = factoryBeanClass;
this.dependsOn = (beanFactory) -> Arrays.stream(dependencyTypes)
.flatMap((dependencyType) -> getBeanNames(beanFactory, dependencyType).stream())
.collect(Collectors.toSet());
}
/**
* Create an instance with target bean class and dependency names.
* @param beanClass target bean class
* @param dependsOn dependency names
* @since 2.0.4
*/
protected AbstractDependsOnBeanFactoryPostProcessor(Class<?> beanClass, String... dependsOn) {
this(beanClass, null, dependsOn);
}
/**
* Create an instance with target bean class and dependency types.
* @param beanClass target bean class
* @param dependencyTypes dependency types
* @since 2.1.7
*/
protected AbstractDependsOnBeanFactoryPostProcessor(Class<?> beanClass, Class<?>... dependencyTypes) {
this(beanClass, null, dependencyTypes);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
for (String beanName : getBeanNames(beanFactory)) {
BeanDefinition definition = getBeanDefinition(beanName, beanFactory);
String[] dependencies = definition.getDependsOn();
for (String dependencyName : this.dependsOn.apply(beanFactory)) {
dependencies = StringUtils.addStringToArray(dependencies, dependencyName);
}
definition.setDependsOn(dependencies);
}
}
@Override
public int getOrder() {
return 0;
}
private Set<String> getBeanNames(ListableBeanFactory beanFactory) {
Set<String> names = getBeanNames(beanFactory, this.beanClass);
if (this.factoryBeanClass != null) {
names.addAll(getBeanNames(beanFactory, this.factoryBeanClass));
}
return names;
}
private static Set<String> getBeanNames(ListableBeanFactory beanFactory, Class<?> beanClass) {
String[] names = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(beanFactory, beanClass, true, false);
return Arrays.stream(names).map(BeanFactoryUtils::transformedBeanName).collect(Collectors.toSet());
}
private static BeanDefinition getBeanDefinition(String beanName, ConfigurableListableBeanFactory beanFactory) {
try {
return beanFactory.getBeanDefinition(beanName);
}
catch (NoSuchBeanDefinitionException ex) {
BeanFactory parentBeanFactory = beanFactory.getParentBeanFactory();
if (parentBeanFactory instanceof ConfigurableListableBeanFactory listableBeanFactory) {
return getBeanDefinition(beanName, listableBeanFactory);
}
throw ex;
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free