【发布时间】:2023-03-30 04:45:01
【问题描述】:
我有 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包含:-
IMyConfig的MyConfigAlter实现,标记为@Alternative。 - 一个
Main类(和方法),用于初始化 Weld SE 并检索一个IMyApibean。 -
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();
【问题讨论】:
-
您能否提供一些信息,例如您使用的是什么版本的焊接,您是如何引导的?专业化对我来说听起来很奇怪。
-
@JohnAment 感谢您的关注,我添加了请求的数据。
-
你上面提到的三个jar中,初始化代码在哪一个?
-
@JohnAment 在
ProjectC中,在Main类的main方法中。