|
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