From 6b107530f521b61c8057a108c3ec6b2ff053ac37 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 27 Sep 2023 09:32:53 +0100 Subject: [PATCH] Polish "Use Neo4jManagedTypes to populate the mapping context" See gh-37574 --- .../neo4j/Neo4jDataAutoConfiguration.java | 3 +-- .../Neo4jDataAutoConfigurationTests.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java index 55508a7c94..742577d68a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -81,7 +81,6 @@ public class Neo4jDataAutoConfiguration { @Bean @ConditionalOnMissingBean public Neo4jMappingContext neo4jMappingContext(Neo4jManagedTypes managedTypes, Neo4jConversions neo4jConversions) { - Neo4jMappingContext context = new Neo4jMappingContext(neo4jConversions); context.setManagedTypes(managedTypes); return context; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java index 2b3aeb38d4..76dc81f42e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java @@ -29,6 +29,7 @@ import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.neo4j.aot.Neo4jManagedTypes; import org.springframework.data.neo4j.core.DatabaseSelection; import org.springframework.data.neo4j.core.DatabaseSelectionProvider; import org.springframework.data.neo4j.core.Neo4jClient; @@ -37,6 +38,7 @@ import org.springframework.data.neo4j.core.Neo4jTemplate; import org.springframework.data.neo4j.core.convert.Neo4jConversions; import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.ReactiveTransactionManager; import org.springframework.transaction.TransactionManager; @@ -162,6 +164,29 @@ class Neo4jDataAutoConfigurationTests { }); } + @Test + void shouldProvideManagedTypes() { + this.contextRunner.run((context) -> { + assertThat(context).hasSingleBean(Neo4jManagedTypes.class); + assertThat(context.getBean(Neo4jMappingContext.class)) + .extracting((mappingContext) -> ReflectionTestUtils.getField(mappingContext, "managedTypes")) + .isEqualTo(context.getBean(Neo4jManagedTypes.class)); + }); + } + + @Test + void shouldReuseExistingManagedTypes() { + Neo4jManagedTypes managedTypes = Neo4jManagedTypes.from(); + this.contextRunner.withBean("customManagedTypes", Neo4jManagedTypes.class, () -> managedTypes) + .run((context) -> { + assertThat(context).hasSingleBean(Neo4jManagedTypes.class); + assertThat(context).doesNotHaveBean("neo4jManagedTypes"); + assertThat(context.getBean(Neo4jMappingContext.class)) + .extracting((mappingContext) -> ReflectionTestUtils.getField(mappingContext, "managedTypes")) + .isSameAs(managedTypes); + }); + } + @Configuration(proxyBeanMethods = false) static class CustomDatabaseSelectionProviderConfiguration {