如何使用该字段注入包含要用作附加构造函数参数的 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 );

谢谢

有帮助吗?

解决方案

像这样的东西:

<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() 作为创建的工厂方法 configuration bean,然后将其注入到正确的构造函数中 EmbeddedGraphDatabase.

其他提示

创建豆该负载性质(和需要的文件名作为参数),并注入该代替。

修改:当使用注释,像构造器注入变得更简单:

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

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

注意,第二bean定义方法“简称为”调用第一个。当这段代码执行时,春天会做一些法宝,让您可以在其他地方覆盖豆(即蚕豆还是互相覆盖),这将确保该方法体将只执行一次(无论多么频繁,并从那里叫)。

如果该配置是在不同的@Configuration类,则可以@Autowired它:

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top