コンストラクター-ARGフィールドを使用してスプリングビーンの居住

StackOverflow https://stackoverflow.com/questions/3466437

  •  28-09-2019
  •  | 
  •  

質問

フィールドを使用して追加のコンストラクター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 );

ありがとう

役に立ちましたか?

解決

このようなもの:

<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() 作成する工場の方法として configuration その後、の適切なコンストラクターに注入されます EmbeddedGraphDatabase.

他のヒント

プロパティをロードする豆を作成し(引数としてファイル名を取得します)、代わりに注入します。

編集 注釈を使用すると、コンストラクターの注入などがより単純になります。

@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定義方法は、「単純に」と呼ばれることに注意してください。このコードが実行されると、Springは魔法を行うので、他の場所で豆をオーバーライドできます(つまり、豆はまだ上書きします)。と呼ばれていました)。

構成が別の場合 @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