コメントに記載されているように、これは設定ファイルにあなたのロケーションの詳細を格納してから、Spring Beanの初期化時にそれらを挿入することによって行うことができます。 Beanメソッドの作成に直接あなたの財産を注入.By
:私はこれを達成するため行うにはデモ-INGの4つの方法です以下
my.sample.config.A=somelocationA
my.sample.config.B=somelocationB
my.sample.config.C=somelocationC
my.sample.config.D.one=somelocationD1
my.sample.config.D.two=somelocationD2
:あなたのapplication.properties
はこのようになりますと仮定すると、
:小道具を注入
@Bean
public A myBeanA(@Value("${my.sample.config.A}") String myprop) {
System.out.println("from bean A with " + myprop);
return new A(myprop);
}
.Byコンフィグ全体の変数にertyとあなたのBeanメソッドの作成であることを使用します。
@Value("${my.sample.config.B}")
private String mylocationB;
//..
@Bean
public B myBeanB() {
System.out.println("from bean B with " + mylocationB);
return new B(mylocationB);
}
.By Configで環境全体を注入して、必要なプロパティを手で選ぶ:
@Autowired
private Environment env;
//..
@Bean
public C myBeanC() {
String locationC = env.getProperty("my.sample.config.C");
System.out.println("from bean C with " + locationC);
return new C(locationC);
}
。これはSpring Boot専用の方法です。 Type-safe Configuration Propertiesに@ConfigurationProperties
というアノテーションを付けると、接頭辞 - 名前空間を定義するBeanを直接指定することができ、その点以降のすべてのパラメータは、そのBeanで定義されたプロパティに自動マッピングされます。一枚で全体の1ファイルコードの下
@ConfigurationProperties(prefix = "my.sample.config.D")
@Component
class D {
private String one;
private String two;
public String getOne() { return one; }
public void setOne(String one) {
System.out.println("from bean D with " + one);
this.one = one;
}
public String getTwo() { return two; }
public void setTwo(String two) {
System.out.println("from bean D with " + two);
this.two = two;
}
}
:
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@SpringBootApplication
public class DemoApplication {
@Autowired
private Environment env;
@Value("${my.sample.config.B}")
private String mylocationB;
@Bean
public A myBeanA(@Value("${my.sample.config.A}") String myprop) {
System.out.println("from bean A with " + myprop);
return new A(myprop);
}
@Bean
public B myBeanB() {
System.out.println("from bean B with " + mylocationB);
return new B(mylocationB);
}
@Bean
public C myBeanC() {
String locationC = env.getProperty("my.sample.config.C");
System.out.println("from bean C with " + locationC);
return new C(locationC);
}
@ConfigurationProperties(prefix = "my.sample.config.D")
@Component
class D {
private String one;
private String two;
public String getOne() { return one; }
public void setOne(String one) {
System.out.println("from bean D with " + one);
this.one = one;
}
public String getTwo() { return two; }
public void setTwo(String two) {
System.out.println("from bean D with " + two);
this.two = two;
}
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
class A {
private final String location;
public A(String location) { this.location = location; }
}
class B {
private final String location;
public B(String location) { this.location = location; }
}
class C {
private final String location;
public C(String location) { this.location = location; }
}
}
あなたは、事前にこのプロパティを知っていますか?はいの場合は、プロパティに格納して、それをBeanに転送してください。 – dimitrisli
私はプロパティに格納することを考えなかった、これは良い提案です!実際にはあなたは答えにこれを促進することができます:) –