Merge pull request #37574 from michael-simons
* gh-37574: Polish "Use Neo4jManagedTypes to populate the mapping context" Use Neo4jManagedTypes to populate the mapping context Closes gh-37574
This commit is contained in:
@@ -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.
|
||||
@@ -33,6 +33,7 @@ import org.springframework.boot.autoconfigure.transaction.TransactionManagerCust
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.neo4j.aot.Neo4jManagedTypes;
|
||||
import org.springframework.data.neo4j.core.DatabaseSelectionProvider;
|
||||
import org.springframework.data.neo4j.core.Neo4jClient;
|
||||
import org.springframework.data.neo4j.core.Neo4jOperations;
|
||||
@@ -71,12 +72,17 @@ public class Neo4jDataAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public Neo4jMappingContext neo4jMappingContext(ApplicationContext applicationContext,
|
||||
Neo4jConversions neo4jConversions) throws ClassNotFoundException {
|
||||
Neo4jManagedTypes neo4jManagedTypes(ApplicationContext applicationContext) throws ClassNotFoundException {
|
||||
Set<Class<?>> initialEntityClasses = new EntityScanner(applicationContext).scan(Node.class,
|
||||
RelationshipProperties.class);
|
||||
return Neo4jManagedTypes.fromIterable(initialEntityClasses);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public Neo4jMappingContext neo4jMappingContext(Neo4jManagedTypes managedTypes, Neo4jConversions neo4jConversions) {
|
||||
Neo4jMappingContext context = new Neo4jMappingContext(neo4jConversions);
|
||||
context.setInitialEntitySet(initialEntityClasses);
|
||||
context.setManagedTypes(managedTypes);
|
||||
return context;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user