2016-07-15 7 views
2

を経由して、既存のBeanに@Named修飾子を追加する場合:私のWebアプリケーションでCDIあいまいな依存関係私は、依存関係のjarファイル内のCDI Bean実装してい@Produces

@ApplicationScoped 
public class MyService { 
    public String doSomething() {...} 
} 

を、私はEL式を経て、そのサービスにアクセスしたいです、したがって、私はそれに@Named注釈を付ける必要があります。しかし、コードを変更する権利がないので、MyServiceの実装にアノテーションを追加することはできません。

ので、私はこれが

WELD-001409になり

public class MyServiceProducer { 
    @Inject MyService myService; 

    @Produces @Named("myService") 
    public MyService produceNamedInstance() { 
    return myService; 
    } 
} 

などのプロデューサーを作成してみました - ... @default修飾子を持つ型MyServiceでのためのあいまいな依存関係 可能な依存関係: を - 修飾子[@Any @Default]を持つマネージドBean [クラス... MyService] - 修飾子[@Default @Named @Any]が[...]として宣言されたプロデューサメソッド[myService]

元のソースコードに触れることなく@Named注釈を追加するにはどうすればよいですか?

答えて

1

エラーは、@Inject MyServiceを参照しています。あなたは基本的に@Produces MyService注射可能なMyServiceという2番目の豆を定義しましたが、正確にどちらの服を@Inject経由で注入するのか明確ではありませんでした。だからCDIは混乱し、このあいまいな依存エラーをスローします。

すでに自動生成されたBean用に別のプロデューサを作成する代わりに、既存のBeanを拡張して名前を付けるだけです。著名

@Named("myService") 
public class MyNamedService extends MyService { 
    // 
} 

scopeが既に@Inheritedあるので、あなたはそれを再定義する必要はありませんということでなければなりません。

+0

ありがとう、それはトリックでした:) – Florian

+0

あなたはようこそ。 – BalusC

関連する問題