2016-11-18 4 views
0

私はSpring Webアプリケーションで特殊なサブクラスを使ってテストしようとしています。プロパティ参照でサブクラスを選択するSpringを作る方法は?

アプリケーションコンテキストxmlファイルは次のように、完全修飾クラス名で、いくつかのBeanのプロパティでクラスを参照:

<bean id="blahblah" class="x.y.z.Blah"> 
    <property name="myFooAttribute" ref="x.y.z.Foo"/> 
</bean> 

と私はx.y.z.Barの代わりx.y.z.Fooをインスタンス化して使用したい、どこでもそれがあります中古。

私のテストでは、Javaベースの設定を使用していて、XML設定をインポートしています(私が実際にあまり混乱させたくないレガシーなもの)。インラインで宣言されたモックを使用します。

@Configuration 
@ImportResource({ 
     "classpath:applicationContext-common.xml", 
     "classpath:app-servlet.xml" 
}) 
static class TestConfig { 
    static class Bar extends Foo { 
     //some stuff overridden here 
    } 

} 

どのように私はx.y.z.Fooに参照しているすべての場所ではなく、私のBarクラスを使用することができますか?できればxmlファイルを変更することなく...

+0

'Bar'型のBeanと' Foo'型のBeanを追加するだけですか? – chrylis

+0

'Foo' Beanは、私が知っているところでは定義されていません。引数なしのデフォルトのコンストラクタを持っているのでシングルトンBeanを作っていると思います... – fortran

+0

しかし、おそらく私は間違っています。どちらの場合でも、テスト目的のために元の設定を変更したくない場合は、必要なビットをオーバーライドするだけです。 – fortran

答えて

0

オーバーライドしようとしているクラスとして名前のついたBeanを作成すると動作します。これは、Bean注釈を使用してJavaスタイルの設定で実現できます。

@Configuration 
@ImportResource({ 
     "classpath:applicationContext-common.xml", 
     "classpath:app-servlet.xml" 
}) 
static class TestConfig { 
    static class Bar extends Foo { 
     //some stuff overridden here 
    } 
    private Bar myTestBar = new Bar(); 
    @Bean(name="x.y.z.Foo") 
    public Foo getFoo() { 
     return myTestBar; 
    } 
} 
関連する問題