作成したのと同じタイプの2つの豆との構成以下を検討:コンパイル時にパラメータの名前が失われた場合、Springはパラメータ名によってどのように自動配線しますか?
@Configuration
@ComponentScan(basePackageClasses = TwoStrings.class)
public class Config {
@Bean
public String one() {
return "one";
}
@Bean
public String two() {
return "two";
}
}
上記コンポーネントスキャンによって作成された2つのBeanに依存する別のBean:ローカル変数/パラメータの
@Component
public class TwoStrings {
public final String a;
public final String b;
@Autowired
public TwoStrings(String one, String two) {
this.a = one;
this.b = two;
}
}
名コンパイル時に失われ、実行時には使用できませんされています
しかし、Springは何とか2つのString
beanを正確に自動生成します。
one
two
コンストラクタのパラメータの名前が失われる考えると、私は春が春、タイプString
の1つの以上のBeanがあるという例外をスローするために期待される
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class Example {
@Autowired
private TwoStrings twoStrings;
@Test
public void test() {
System.out.println(twoStrings.a);
System.out.println(twoStrings.b);
}
}
プリント以下の例のテスト何らかの形でパラメータ名を使ってBeanをオートワイヤします。
Springはコンストラクタパラメータの名前をどのように知っていますか?
の
-parameters
フラグを指定してコンパイルする必要がありますか?これはVMオプションではありません。 IntelliJでどのように制御できますか? –@JaroslawPawlakデフォルトで有効になっています - IntelliJではSettings \ Build、Execution、Deployment \ Compiler \ Java Compiler \ Debugging情報を生成します – bedrin
Springはどのようにこれらのデバッグ情報にアクセスしますか?リフレクションAPIはできません。 –