20

フィールドを使用して追加のコンストラクター引数として使用される 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()、ファクトリ メソッドとして使用して Bean を作成しconfiguration、それを の適切なコンストラクタに注入し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() );
}

2 番目の Bean 定義メソッドは、最初の Bean 定義メソッドを「単純に」呼び出すことに注意してください。このコードが実行されると、Spring はいくつかの魔法を実行して、Bean を他の場所でオーバーライドできるようにし (つまり、Bean は相互に上書きします)、メソッド本体が 1 回だけ実行されるようにします (頻度と場所に関係なく)。と呼ばれていました)。

構成が別の@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 に答える