我有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
- a部分
META-INF\beans.xml
中MyConfigAlter
列出的位置alternatives
。
- 的
现在,我运行Main
该类,并且IMyApi
成功检索到 bean(作为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();