2010-08-12 69 views
20

如何注入包含要用作附加構造函數arg的Map的屬性文件使用該字段。使用constructor-arg字段填充彈簧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); 

感謝

回答

32

事情是這樣的:

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

使用loadConfigurations()因爲這需要的the ability to create beans using arbitrary static factory methods優勢,在這種情況下,一種工廠方法創建configuration bean,然後將其注入到EmbeddedGraphDatabase的正確構造函數中。

+3

謝謝skaffman,它完美的作品:) – patrickandroid 2010-08-16 19:32:21

+1

我加了這個[Neo4j wiki](http://wiki.neo4j.org/content/Spring_And_Neo4j#Configuring_Neo4j_settings_in_Spring),謝謝你們! – nawroth 2010-08-18 13:48:38

+0

@skaffman +1謝謝!你能否也請使用註釋添加答案? – 2013-11-25 07:04:03

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); 
} 
+0

請問您可以使用註釋添加答案嗎? – 2013-11-25 07:05:34

+0

@KanagaveluSugumar:完成。 – 2013-11-25 10:36:36

+0

非常感謝你!!根據你的回答,我提出了一些問題。 http://stackoverflow.com/questions/20210307/sping-annotations-how-to-create-autowire-annotation-for-static-method-with-argu – 2013-11-26 07:44:57