|
23 | 23 |
|
24 | 24 | import org.neo4j.ogm.annotation.NodeEntity;
|
25 | 25 | import org.neo4j.ogm.annotation.RelationshipEntity;
|
| 26 | +import org.springframework.beans.factory.annotation.Autowire; |
| 27 | +import org.springframework.beans.factory.annotation.Autowired; |
26 | 28 | import org.springframework.beans.factory.annotation.Qualifier;
|
27 | 29 | import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
28 | 30 | import org.springframework.beans.factory.support.AutowireCandidateQualifier;
|
@@ -189,23 +191,29 @@ public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConf
|
189 | 191 | return;
|
190 | 192 | }
|
191 | 193 |
|
| 194 | + String configuredMappingContextBeanName = config.getAttribute("mappingContextBeanName").orElse(GENERATE_BEAN_NAME); |
192 | 195 | String configuredSessionBeanName = config.getAttribute("sessionBeanName").orElse(GENERATE_BEAN_NAME);
|
193 |
| - this.sessionBeanName = registerWithGeneratedNameOrUseConfigured(createSharedSessionCreatorBeanDefinition(config), |
194 |
| - registry, configuredSessionBeanName, source); |
195 | 196 |
|
196 |
| - String configuredMappingContextBeanName = config.getAttribute("mappingContextBeanName").orElse(GENERATE_BEAN_NAME); |
| 197 | + // Register mapping context |
197 | 198 | this.neo4jMappingContextBeanName = registerWithGeneratedNameOrUseConfigured(
|
198 | 199 | createNeo4jMappingContextFactoryBeanDefinition(config), registry, configuredMappingContextBeanName, source);
|
199 | 200 |
|
200 |
| - registerIfNotAlreadyRegistered(() -> new RootBeanDefinition(Neo4jPersistenceExceptionTranslator.class), registry, |
201 |
| - NEO4J_PERSISTENCE_EXCEPTION_TRANSLATOR_NAME, source); |
202 |
| - |
| 201 | + // Prepare session factory postprocessor |
203 | 202 | AbstractBeanDefinition rootBeanDefinition = BeanDefinitionBuilder
|
204 | 203 | .rootBeanDefinition(Neo4jOgmEntityInstantiatorConfigurationBean.class)
|
205 |
| - .setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE) |
| 204 | + .setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR) |
206 | 205 | .addConstructorArgReference(getSessionFactoryBeanName(config))
|
207 |
| - .addConstructorArgReference(this.neo4jMappingContextBeanName).getBeanDefinition(); |
208 |
| - registerWithGeneratedNameOrUseConfigured(rootBeanDefinition, registry, GENERATE_BEAN_NAME, source); |
| 206 | + .addConstructorArgReference(this.neo4jMappingContextBeanName) |
| 207 | + .getBeanDefinition(); |
| 208 | + String sessionFactoryPostProcessorBeanName = registerWithGeneratedNameOrUseConfigured( |
| 209 | + rootBeanDefinition, registry, GENERATE_BEAN_NAME, source); |
| 210 | + |
| 211 | + // Make sure the shared session creator depends on it |
| 212 | + this.sessionBeanName = registerWithGeneratedNameOrUseConfigured( |
| 213 | + createSharedSessionCreatorBeanDefinition(config, sessionFactoryPostProcessorBeanName), registry, configuredSessionBeanName, source); |
| 214 | + |
| 215 | + registerIfNotAlreadyRegistered(() -> new RootBeanDefinition(Neo4jPersistenceExceptionTranslator.class), registry, |
| 216 | + NEO4J_PERSISTENCE_EXCEPTION_TRANSLATOR_NAME, source); |
209 | 217 | }
|
210 | 218 |
|
211 | 219 | /**
|
@@ -236,13 +244,17 @@ private static String registerWithGeneratedNameOrUseConfigured(AbstractBeanDefin
|
236 | 244 | return registeredBeanName;
|
237 | 245 | }
|
238 | 246 |
|
239 |
| - private static AbstractBeanDefinition createSharedSessionCreatorBeanDefinition(RepositoryConfigurationSource config) { |
| 247 | + private static AbstractBeanDefinition createSharedSessionCreatorBeanDefinition( |
| 248 | + RepositoryConfigurationSource config, |
| 249 | + String sessionFactoryPostProcessorBeanName |
| 250 | + ) { |
240 | 251 |
|
241 | 252 | String sessionFactoryBeanName = getSessionFactoryBeanName(config);
|
242 | 253 |
|
243 | 254 | AbstractBeanDefinition sharedSessionCreatorBeanDefinition = BeanDefinitionBuilder //
|
244 | 255 | .rootBeanDefinition(SharedSessionCreator.class, "createSharedSession") //
|
245 | 256 | .addConstructorArgReference(sessionFactoryBeanName) //
|
| 257 | + .addDependsOn(sessionFactoryPostProcessorBeanName) |
246 | 258 | .getBeanDefinition();
|
247 | 259 |
|
248 | 260 | sharedSessionCreatorBeanDefinition
|
|
0 commit comments