Pregunta

¿Cómo me inyecto un archivo de propiedades que contiene un mapa para ser utilizado como constructor de Arg adicional utilizando el campo.

Con un mapa se carga desde un archivo de propiedades

el grano se pone actualmente usando:

<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 equivalente:

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

Gracias

¿Fue útil?

Solución

Algo como esto:

<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>

Esto aprovecha la capacidad de crear frijoles usando métodos de fábrica estática arbitraria , en este caso utilizando loadConfigurations() como un método de fábrica para crear el bean configuration, que se inyecta a continuación en el constructor adecuado de EmbeddedGraphDatabase .

Otros consejos

Crear un bean que carga las propiedades (y lleva el nombre del archivo como argumento) y se inyecta en su lugar.

Editar Cuando se utiliza anotaciones, cosas como la inyección de constructor ser más simple:

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

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

Tenga en cuenta que el segundo método de definición de frijol "simplemente" llama a la primera. Cuando se ejecuta este código, la primavera va a hacer un poco de magia lo que aún puede anular el frijol en otro lugar (es decir, los granos todavía sobreescriben entre sí) y que se asegurará de que el cuerpo del método se ejecutará sólo una vez (no importa con qué frecuencia y desde donde fue llamado).

Si la configuración está en una clase @Configuration diferente, entonces se puede @Autowired que:

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top