私のアプリケーションでは、サービスを使用するいくつかのBeanがあります。サービスには@Named("Name")
と注釈が付けられ、@Inject
が挿入されます。Javax:名前付きサービスの拡張
私にはサービスがあります。私はそれのためのインターフェイスと実装を持っています。 私のアプリケーションの別のモジュールでは、このサービスをさまざまな方法で使用できますが、いくつかの方法が異なる必要があり、新しい方法が必要です。だから私は最初のサービスを別のものに拡張したかったのです。
私はこのような何かを思い付いた:もちろん
Interface Service1 {...}
@Named(Service1)
Class Service1Impl implements Service1 {...}
Interface SpecialService1 extends Service1 {...}
@Named(SpecialService1)
Class SpecialService1 extends Service1Impl implements SpecialService1 {...}
私は私のサーバーの起動時にクラスの2つの試合があるので、私は、タイプService1
とは予選Beanが存在しないというメッセージを取得Service1を実装します。
しかし、私はすべてのメソッドにアクセスするためにSpecialService1
でService1
を拡張する必要があると私は再びすべてを実装する必要がないようにSpecialService1Impl
でService1Impl
を拡張する必要があります。
私の豆で私はちょうどSpecialService1
を注入し、Service1
およびSpecialService1
のすべての方法にアクセスしたいと思います。
このような構造をどのように働かせることができますか?
あなたのBeanが 'Service1'と' SpecialService1'の両方であれば、 'SpecialService1'を登録する必要があります。 –
あなたが何を意味するのか本当に理解していない。他の豆では、私はService1を注入する必要があります。別のBeanではSpecialService1が必要です。私は豆1つにつき1つだけを注入します。しかし、@Namedを両方のサービスの上に置いて、それらのうちの1つを注入できるようにする必要があります。 –
いいえあなたはしません...あなたの 'SpecialService1'も' Service1'です...あなたは両方の役割をフルフィルするために 'SpecialService1'のインスタンスが必要です...本当に2つのインスタンスが必要な場合は、 '@修飾子'を使ってそれらを区別することができます...あなたの '@Service1'を' @ Primary'とマークして、デフォルトで使用され、もう1つが選択的に注入されるようにすることができます。 –