From 6d08654917b896329bc537d0793feeaf80fb456b Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 1 Dec 2014 10:12:05 +0100 Subject: [PATCH] DATAJPA-638 - Improve bean definition registration for root configuration element. We now make sure wo register shared bean definitions only once for all usages of a root configuration element (XML or annotation). Related ticket: DATACMNS-609. --- .../config/JpaRepositoryConfigExtension.java | 16 ++++++---------- .../JpaRepositoryConfigExtensionUnitTests.java | 5 ++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java b/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java index 1dc707412..d992952ed 100644 --- a/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java +++ b/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java @@ -129,19 +129,15 @@ public class JpaRepositoryConfigExtension extends RepositoryConfigurationExtensi super.registerBeansForRoot(registry, config); Object source = config.getSource(); - registerWithSourceAndGeneratedBeanName(registry, new RootBeanDefinition( - EntityManagerBeanDefinitionRegistrarPostProcessor.class), source); - if (!registry.containsBeanDefinition(JPA_MAPPING_CONTEXT_BEAN_NAME)) { - registry.registerBeanDefinition(JPA_MAPPING_CONTEXT_BEAN_NAME, // - new RootBeanDefinition(JpaMetamodelMappingContextFactoryBean.class)); - } + registerIfNotAlreadyRegistered(new RootBeanDefinition(EntityManagerBeanDefinitionRegistrarPostProcessor.class), + registry, "foo", source); - if (!hasBean(PAB_POST_PROCESSOR, registry) - && !registry.containsBeanDefinition(AnnotationConfigUtils.PERSISTENCE_ANNOTATION_PROCESSOR_BEAN_NAME)) { + registerIfNotAlreadyRegistered(new RootBeanDefinition(JpaMetamodelMappingContextFactoryBean.class), registry, + JPA_MAPPING_CONTEXT_BEAN_NAME, source); - registerWithSourceAndGeneratedBeanName(registry, new RootBeanDefinition(PAB_POST_PROCESSOR), source); - } + registerIfNotAlreadyRegistered(new RootBeanDefinition(PAB_POST_PROCESSOR), registry, + AnnotationConfigUtils.PERSISTENCE_ANNOTATION_PROCESSOR_BEAN_NAME, source); } /** diff --git a/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java index eff7cf045..646f9f6de 100644 --- a/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java @@ -53,7 +53,6 @@ import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcesso public class JpaRepositoryConfigExtensionUnitTests { private static final String RIABPP_CLASS_NAME = "org.springframework.data.repository.core.support.RepositoryInterfaceAwareBeanPostProcessor"; - private static final String PABPP_CLASS_NAME = "org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"; @Mock RepositoryConfigurationSource configSource; @@ -69,8 +68,8 @@ public class JpaRepositoryConfigExtensionUnitTests { Iterable names = Arrays.asList(factory.getBeanDefinitionNames()); - assertThat(names, Matchers. hasItem(Matchers.startsWith(PABPP_CLASS_NAME))); - assertThat(names, Matchers. hasItem(Matchers.startsWith(RIABPP_CLASS_NAME))); + assertThat(names, Matchers. hasItem(AnnotationConfigUtils.PERSISTENCE_ANNOTATION_PROCESSOR_BEAN_NAME)); + assertThat(names, Matchers. hasItem(RIABPP_CLASS_NAME)); } @Test