フィールドを使用して追加のコンストラクタ引数として使用されるマップを含むプロパティファイルを挿入するにはどうすればよいですか。
プロパティファイルからマップが読み込まれる場合
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を作成する機能 を利用します。この場合は、configuration
Beanを作成するファクトリメソッドとしてloadConfigurations()
を使用します。その後、EmbeddedGraphDatabase
の適切なコンストラクターに注入されます。
プロパティーをロードする(そしてファイル名を引数として取る)Beanを作成し、代わりにそれを注入します。
[〜#〜] edit [〜#〜]注釈を使用する場合、コンストラクター注入のようなものはより単純になります。
@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は何らかの魔法をかけるので、Beanを他の場所でオーバーライドできます(つまり、Beanは相互に上書きします)。と呼ばれていました)。
構成が別の@Configuration
クラスにある場合、@Autowired
itできます:
@Autowired
private Map<String,String> configuration;
@Bean
public GraphDatabaseService graphDb() {
return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}