20

如何使用该字段注入包含要用作附加构造函数 arg 的 Map 的属性文件。

从属性文件加载地图

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" value=?  />
</bean>

Java等价物:

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

谢谢

4

2 回答 2

33

像这样的东西:

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

这利用了使用任意静态工厂方法创建 bean 的能力,在这种情况下,使用loadConfigurations()工厂方法来创建configurationbean,然后将其注入EmbeddedGraphDatabase.

于 2010-08-12T11:49:55.833 回答
8

创建一个加载属性的bean(并将文件名作为参数)并注入它。

编辑使用注释时,构造函数注入之类的事情变得更加简单:

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

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

请注意,第二个 bean 定义方法“简单地”调用第一个。当这段代码被执行时,Spring 会做一些魔法,所以你仍然可以在其他地方覆盖 bean(即 bean 仍然相互覆盖),它会确保方法体只执行一次(不管它多久执行一次,从哪里执行)被称为)。

如果配置在不同的@Configuration类中,那么你可以@Autowired

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
于 2010-08-12T09:51:14.380 回答