Frage

Wie kann ich spritze eine Eigenschaftsdatei eine Map enthält als zusätzliche Konstruktor verwendet werden arg das Feld verwendet wird.

Mit einer Karte aus einer Properties-Datei geladen wird

die Bohne ist derzeit Setup mit:

<bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
     init-method="enableRemoteShell" destroy-method="shutdown">

     <constructor-arg index="0" value= "data/neo4j-db"/>
         <constructor-arg index="1" value=?  />
</bean>

Java-Äquivalent:

Map<String,String> configuration =  EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/neo4j-db", configuration );

Danke

War es hilfreich?

Lösung

So etwas wie folgt aus:

<bean id="configuration" class="org.neo4j.kernel.EmbeddedGraphDatabase" 
      factory-method="loadConfigurations">
   <constructor-arg value="neo4j_config.props"/>
</bean>

<bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
     init-method="enableRemoteShell" destroy-method="shutdown">

     <constructor-arg index="0" value="data/neo4j-db"/>
     <constructor-arg index="1" ref="configuration"  />
</bean>

Dies nutzt

Andere Tipps

Erstellen Sie eine Bohne, dass lädt die Eigenschaften (und nimmt den Dateinamen als Argument) und inject dass statt.

Bearbeiten Wenn Annotationen verwenden, Dinge wie Konstruktor Injektion werden einfacher:

@Bean
public Map<String,String> configuration() {
    return EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
}

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration() );
}

Beachten Sie, dass die zweite Bean-Definition-Methode „einfach“ das erste nennt. Wenn dieser Code ausgeführt wird, wird Frühling etwas Magie tun, so dass Sie immer noch an andere Stelle die Bohne außer Kraft setzen können (dh Bohnen noch gegenseitig überschreiben), und es wird darauf achten, dass die Methode Körper nur einmal ausgeführt werden (unabhängig davon, wie oft und von wo aus es genannt wurde).

Wenn die Konfiguration in einer anderen @Configuration Klasse ist, dann können Sie es @Autowired:

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
scroll top