2016-12-07 10 views
0

私のようなものが必要ですSpringで@Serviceに複数の名前を付けるにはどうすればいいですか?

@Named({"bean1", "bean2"}) 

@Service({"bean1", "bean2"}) 

を誰かが私を助けることができますか?

+0

なぜこれが必要ですか? –

+0

同じグループに3つの製品があります。私はグループのためのサービスが必要ですが、私は製品のコードを受け取ります。そのため、1つのサービスの実装は私の製品にとって十分です。私はgetBean(productId)を使用していますが、複数の名前が必要です。 – Lucas

+1

誰かがなぜ投票を下すのか説明できますか?人々は説明したいだけでなく、ちょっと落としたいと思っています... – Lucas

答えて

3

あなたが持っている方法ではありません。しかし、既存の@Service(または@Component)を@Beanに名前またはリストの名前で再定義することは可能です。 Service-A(あなた@Service)、Service-B、およびService-C

@Service("Service-A") 
public class SampleService { 
    public String doSomething() { return "Foo"; } 
} 

@Configuration 
public class SampleConfig { 

    @Bean(name = {"Service-B", "Service-C"}) 
    public SampleService createMirroredService(@Autowired SampleService service) { 
     return service; 
    } 
} 

そして今、あなたは3つのSampleServiceのインスタンスを持っています。これは、あなたが1つを定義して、@Bean注釈付きメソッドが実装を通過するだけでエイリアスを作成する効果があります。スキャンで構成クラスが選択されていることを確認してください。正常に動作するはずです。

ノート:これはうまくいくかもしれませんが、おそらく他の解決策もありますが、私はこれが必要な場合は考えられません。おそらく、私が変えることができない、すでに存在する図書館と統合しているならば。しかし、私にこのことに対する深刻な必要性があると私は打撃を与えません。そうしないと、の@Componentが配列になります。

+1

私はこれを特定の使用例のために必要とします!本当にありがとうございました... – Lucas

関連する問題