7

SpringBeanが次のように構成されているとします。

@Service("myService")
public class DefaultService extends MyService {
}

そしてこのBeanを使ったクラス

public class Consumer {
    @Autowired
    @Qualifier("myService")
    private MyService service;
    ...
}

ここで、前述のクラスを含むプロジェクトに、注入Consumerの別の実装を持たせたいと思います。MyServiceしたがって、Beanを上書きしたいと思いますmyService

@Service("myService")
public class SpecializedService implements MyService {
}

その結果、代わりにのConsumerインスタンスが実行されます。定義上、Springコンテナに同じ名前のBeanを2つ含めることはできません。新しいサービスの定義が古いサービスを上書きすることをSpringにどのように伝えることができますか?クラスを変更したくありません。SpecializedServiceDefaultServiceConsumer

4

4 に答える 4

3

サービス Bean を明示的に定義する

<bean id="myService" class="x.y.z.SpecializedService" />

またはコンポーネントスキャンします。

どちらの場合でも、アプリケーション コンテキストで、DefaultService を明示的に定義することは避け、コンポーネント スキャンを避けるようにしてください。

于 2011-04-07T04:54:23.033 に答える
2

フィルタを使用してコンポーネント スキャンから除外する

<component-scan base-package="your-package">
    <exclude-filter type="regex" expression="DefaultService" />
</component-scan>

アノテーションのみでそれを行う方法があるかどうかはわかりません( @Service アノテーションを DefaultService から削除する以外に)。

于 2011-04-07T05:25:57.563 に答える