projectA
、projectB
、およびprojectC
Eclipse Maven プロジェクトがあります。
ProjectA
内容:IMyApi
インターフェース。- 「空の」
META-INF\beans.xml
ファイル。
ProjectB
内容:IMyConfig
インターフェース。MyConfigJndi
の実装IMyConfig
。MyApiImpl
IMyApi
プロパティを持つ の実装@Inject private IMyConfig config;
。- 「空の」
META-INF\beans.xml
ファイル。
ProjectC
内容:- としてマークされた の
MyConfigAlter
実装。IMyConfig
@Alternative
- Weld SE を初期化し、 Beanを取得する
Main
クラス (およびメソッド) 。IMyApi
- セクションに記載されている
META-INF\beans.xml
場所。MyConfigAlter
alternatives
- としてマークされた の
ここで、Main
クラスを実行すると、 Bean が (インスタンスIMyApi
として) 正常に取得されます。MyApiImpl
しかし、そのようなインスタンスには、そのプロパティで、代替バージョンの代わりにインスタンスがconfig
注入されています ( )MyConfigJndi
MyConfigAlter
Eclipse Luna + M2Eclipse を使用しています。
私は何を間違っていますか?
@Specializes
更新:代わりに使用すると問題が解決することがわかりましたが@Alternative
、それでも適切な解決策ではないと思います(状況によっては、「デフォルト」の実装にアクセスできない場合があります)。
更新 2:
私はWeld-se、2.2.10.Finalを使用しています:
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.10.Final</version>
<scope>runtime</scope>
</dependency>
そして、初期化は単純です
WeldContainer weld =
new Weld().
initialize();
IMyApi myApi =
weld.
instance().
select(
IMyApi.
class).
get();