EntityManagerBeanDefinitionRegistrarPostProcessor sets primary flag on EntityManager bean definitions.

Closes #2288.
This commit is contained in:
Réda Housni Alaoui
2021-09-17 22:23:11 +02:00
committed by Greg L. Turnquist
parent 648bd74be5
commit 93705f1a9e
2 changed files with 17 additions and 4 deletions

View File

@@ -43,6 +43,7 @@ import org.springframework.orm.jpa.SharedEntityManagerCreator;
* {@link EntityManagerFactory} instances.
*
* @author Oliver Gierke
* @author Réda Housni Alaoui
*/
public class EntityManagerBeanDefinitionRegistrarPostProcessor implements BeanFactoryPostProcessor, Ordered {
@@ -85,6 +86,7 @@ public class EntityManagerBeanDefinitionRegistrarPostProcessor implements BeanFa
AbstractBeanDefinition emBeanDefinition = builder.getRawBeanDefinition();
emBeanDefinition.setPrimary(definition.getBeanDefinition().isPrimary());
emBeanDefinition.addQualifier(new AutowireCandidateQualifier(Qualifier.class, definition.getBeanName()));
emBeanDefinition.setScope(definition.getBeanDefinition().getScope());
emBeanDefinition.setSource(definition.getBeanDefinition().getSource());

View File

@@ -35,6 +35,7 @@ import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Primary;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.stereotype.Component;
@@ -46,6 +47,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
*
* @author Oliver Gierke
* @author Jens Schauder
* @author Réda Housni Alaoui
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@@ -57,7 +59,8 @@ public class EntityManagerBeanDefinitionRegistrarPostProcessorIntegrationTests {
void injectsEntityManagerIntoConstructors() {
assertThat(target).isNotNull();
assertThat(target.em).isNotNull();
assertThat(target.firstEm).isNotNull();
assertThat(target.primaryEm).isNotNull();
}
/**
@@ -104,16 +107,24 @@ public class EntityManagerBeanDefinitionRegistrarPostProcessorIntegrationTests {
LocalContainerEntityManagerFactoryBean secondEmf() {
return emf();
}
@Primary
@Bean
LocalContainerEntityManagerFactoryBean thirdEmf() {
return emf();
}
}
@TestComponent
static class EntityManagerInjectionTarget {
private final EntityManager em;
private final EntityManager firstEm;
private final EntityManager primaryEm;
@Autowired
public EntityManagerInjectionTarget(@Qualifier("firstEmf") EntityManager em) {
this.em = em;
public EntityManagerInjectionTarget(@Qualifier("firstEmf") EntityManager firstEm, EntityManager primaryEm) {
this.firstEm = firstEm;
this.primaryEm = primaryEm;
}
}
}