Extracted node type strategy selection to a factory bean.

This commit is contained in:
David Montag
2011-03-22 15:49:44 -07:00
parent b28dbf2fc3
commit 186a910c3f
5 changed files with 39 additions and 10 deletions

View File

@@ -100,7 +100,7 @@
<property name="nodeTypeStrategy" ref="nodeTypeStrategy"/>
</bean>
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.SubReferenceNodeTypeStrategy">
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.NodeTypeStrategyFactoryBean">
<constructor-arg ref="graphDatabaseService"/>
<constructor-arg ref="graphEntityInstantiator"/>
</bean>

View File

@@ -31,7 +31,7 @@ import org.springframework.data.graph.neo4j.fieldaccess.NodeEntityStateFactory;
import org.springframework.data.graph.neo4j.fieldaccess.RelationshipEntityStateFactory;
import org.springframework.data.graph.neo4j.finder.FinderFactory;
import org.springframework.data.graph.neo4j.support.GraphDatabaseContext;
import org.springframework.data.graph.neo4j.support.SubReferenceNodeTypeStrategy;
import org.springframework.data.graph.neo4j.support.NodeTypeStrategyFactoryBean;
import org.springframework.data.graph.neo4j.support.node.Neo4jConstructorGraphEntityInstantiator;
import org.springframework.data.graph.neo4j.support.node.Neo4jNodeBacking;
import org.springframework.data.graph.neo4j.support.node.PartialNeo4jEntityInstantiator;
@@ -93,7 +93,8 @@ public class Neo4jConfiguration {
EntityInstantiator<NodeBacked, Node> graphEntityInstantiator = getGraphEntityInstantiator();
gdc.setGraphEntityInstantiator(graphEntityInstantiator);
gdc.setConversionService(new Neo4jConversionServiceFactoryBean().getObject());
gdc.setNodeTypeStrategy(new SubReferenceNodeTypeStrategy(graphDatabaseService, graphEntityInstantiator));
NodeTypeStrategyFactoryBean nodeTypeStrategyFactoryBean = new NodeTypeStrategyFactoryBean(graphDatabaseService, graphEntityInstantiator);
gdc.setNodeTypeStrategy(nodeTypeStrategyFactoryBean.getObject());
if (validator!=null) {
gdc.setValidator(validator);
}

View File

@@ -0,0 +1,33 @@
package org.springframework.data.graph.neo4j.support;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.data.graph.core.NodeBacked;
import org.springframework.data.graph.core.NodeTypeStrategy;
import org.springframework.persistence.support.EntityInstantiator;
public class NodeTypeStrategyFactoryBean implements FactoryBean<NodeTypeStrategy> {
private GraphDatabaseService graphDatabaseService;
private EntityInstantiator<NodeBacked, Node> graphEntityInstantiator;
public NodeTypeStrategyFactoryBean(GraphDatabaseService graphDatabaseService, EntityInstantiator<NodeBacked, Node> graphEntityInstantiator) {
this.graphDatabaseService = graphDatabaseService;
this.graphEntityInstantiator = graphEntityInstantiator;
}
@Override
public NodeTypeStrategy getObject() throws Exception {
return new SubReferenceNodeTypeStrategy(graphDatabaseService, graphEntityInstantiator);
}
@Override
public Class<?> getObjectType() {
return SubReferenceNodeTypeStrategy.class;
}
@Override
public boolean isSingleton() {
return false;
}
}

View File

@@ -103,7 +103,7 @@
<property name="nodeTypeStrategy" ref="nodeTypeStrategy"/>
</bean>
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.SubReferenceNodeTypeStrategy">
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.NodeTypeStrategyFactoryBean">
<constructor-arg ref="graphDatabaseService"/>
<constructor-arg ref="graphEntityInstantiator"/>
</bean>

View File

@@ -100,16 +100,11 @@
<bean id="graphEntityInstantiator"
class="org.springframework.data.graph.neo4j.support.node.Neo4jConstructorGraphEntityInstantiator"/>
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.SubReferenceNodeTypeStrategy">
<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.NodeTypeStrategyFactoryBean">
<constructor-arg ref="graphDatabaseService" />
<constructor-arg ref="graphEntityInstantiator" />
</bean>
<!--<bean id="nodeTypeStrategy" class="org.springframework.data.graph.neo4j.support.IndexingNodeTypeStrategy">-->
<!--<constructor-arg ref="graphDatabaseService" />-->
<!--<constructor-arg ref="graphEntityInstantiator" />-->
<!--</bean>-->
<bean id="nodeEntityStateFactory" class="org.springframework.data.graph.neo4j.fieldaccess.NodeEntityStateFactory">
<property name="nodeDelegatingFieldAccessorFactory">
<bean class="org.springframework.data.graph.neo4j.fieldaccess.NodeDelegatingFieldAccessorFactory">