PersistenceAnnotationBeanPostProcessor obtains default EntityManagerFactory via getBean(Class) algorithm
Issue: SPR-7549
This commit is contained in:
@@ -41,14 +41,14 @@ import org.springframework.beans.PropertyValues;
|
||||
import org.springframework.beans.factory.BeanCreationException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.beans.factory.BeanFactoryUtils;
|
||||
import org.springframework.beans.factory.ListableBeanFactory;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
||||
import org.springframework.beans.factory.annotation.InjectionMetadata;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
|
||||
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
|
||||
import org.springframework.beans.factory.config.NamedBeanHolder;
|
||||
import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.core.BridgeMethodResolver;
|
||||
@@ -569,21 +569,16 @@ public class PersistenceAnnotationBeanPostProcessor
|
||||
protected EntityManagerFactory findDefaultEntityManagerFactory(String requestingBeanName)
|
||||
throws NoSuchBeanDefinitionException {
|
||||
|
||||
String[] beanNames =
|
||||
BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this.beanFactory, EntityManagerFactory.class);
|
||||
if (beanNames.length == 1) {
|
||||
String unitName = beanNames[0];
|
||||
EntityManagerFactory emf = (EntityManagerFactory) this.beanFactory.getBean(unitName);
|
||||
if (this.beanFactory instanceof ConfigurableBeanFactory) {
|
||||
((ConfigurableBeanFactory) this.beanFactory).registerDependentBean(unitName, requestingBeanName);
|
||||
}
|
||||
return emf;
|
||||
}
|
||||
else if (beanNames.length > 1) {
|
||||
throw new NoUniqueBeanDefinitionException(EntityManagerFactory.class, beanNames);
|
||||
if (this.beanFactory instanceof ConfigurableListableBeanFactory) {
|
||||
// Fancy variant with dependency registration
|
||||
ConfigurableListableBeanFactory clbf = (ConfigurableListableBeanFactory) this.beanFactory;
|
||||
NamedBeanHolder<EntityManagerFactory> emfHolder = clbf.resolveNamedBean(EntityManagerFactory.class);
|
||||
clbf.registerDependentBean(emfHolder.getBeanName(), requestingBeanName);
|
||||
return emfHolder.getBeanInstance();
|
||||
}
|
||||
else {
|
||||
throw new NoSuchBeanDefinitionException(EntityManagerFactory.class);
|
||||
// Plain variant: just find a default bean
|
||||
return this.beanFactory.getBean(EntityManagerFactory.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user