私は以下の問題を解決したいと思います。 Spring Bean設定クラスがあるSpringプロジェクトで作業する。複数のautowire候補のスプリング
package package.bean_config_java;
@Configuration
@ComponentScan("package.bean_config_java")
public class Beans {
@Bean
public Customer customerHashmark() {
Customer c = new Customer();
c.setFormatter(hashmarkNameFormatter());
return c;
}
@Bean
public Customer customerUnderscore() {
Customer c = new Customer();
c.setFormatter(underscoreNameFormatter());
return c;
}
@Bean
public Formatter hashmarkNameFormatter() {
return new HashmarkNameFormatter();
}
@Primary
@Bean
public Formatter underscoreNameFormatter() {
return new UnderscoreNameFormatter();
}
}
コンテナから顧客のいずれかを尋ねた後、underscoreNameFormatterを使用して得意先と返品します。
私はこれをデバッグしようとしましたが、春はappの開始時に一度だけcustomer.setFormatterを呼び出すことがわかりました。元は私の設定クラスですから、okですが、結局、ctx .getBeanメソッドformaterはすべてのケースでunderscoreNameFormatterです。
注入された値を無効にすることもできますか?
注:XMLをはセッターc.setFormatter(hashmarkNameFormatter());
がこの呼び出しはあなたのケースであるアプリケーションコンテキストからフォーマッタBeanを設定します@Configurationクラスで呼び出されているので、それはこの
<bean class="package.Customer">
<property name="formatter">
<bean class="package.HashmarkNameFormatter" />
</property>
</bean>
は、私はこれが理由だろうとは思いません。 'return c;'行でデバッグを止め、オブジェクトを調べると 'hashmarkNameFormatter'がすでに設定されています。スプリングのメカニズムによっては後でどこかで 'underscoreNameFormatter'に置き換えられますが、' setFormatter'メソッドでは呼び出されません。 私はあなたのソリューションをとにかく試みましたが、うまくいきませんでした。同じことが起こりました。顧客オブジェクトのフォーマッタフィールドが 'UnderscoreNameFormatter'オブジェクトを参照しています。 – Joooe