【发布时间】:2016-10-13 05:14:40
【问题描述】:
我的项目中有以下场景。
@Named("a")
class A{ }
@Specializes
class B extends A{ }
@Specializes
class C extends B{ }
class Test{
@Inject
A a1;
}
在测试类中,我想将c类实例注入到引用变量a1中。我试过了,它总是注入 B。
如何做到这一点?
Some more information:
I also want to mentioned that each of these 3 classes are in defferent projects. I'm tring to access the method from xhtml file not from Test class I'm using EL .
project1---> A
@Named("links")
@ApplicationScoped
class A{
public String getMethod1(){
}
}
project2(dependency to project1)----> B
@Specializes
class B extends A{
@Override
public String getMethod1(){
}
}
project3(dependency to project1,project2)---->C
@Specializes
class C extends B{
@Override
public String getMethod1(){
}
}
project4(dependency to project1,project2,project3)--->
MyPage.xhtm
<ui:include src="#{links.method1()}">
</ui:include>
当我尝试使用 EL 的“链接”访问时,总是指向 B 类。
请在这里给我建议。
【问题讨论】:
-
从 CDI 的角度来看,我认为您的代码 sn-p 没有问题。如果在本地执行此操作,则效果很好。尝试分享一些关于你的代码的额外信息(更多关于类、bean 发现模式等)。另外,出于好奇,请尝试在您的 bean 上添加范围。
-
谢谢。它应该仪式吗?但它一直在注入 B 类实例。我用 @ApplicationScoped 和 B,C 注释的 A 类没有任何范围。
-
是的,您的使用是完全合法的。我们在谈论什么 CDI 版本?你用的是什么impl?我们是在 SE 还是 EE?你的 bean 发现模式是什么(有 beans.xml 吗?)?
-
我们正在使用带有 WELD 实现的 JavaEE6(CDI 2) 版本并使用 WebLogicserver。我们有 beans.xml,但在里面我们只配置了拦截器。
-
为了更正,Java EE6 意味着您拥有 CDI 1.x。拥有
beans.xml意味着您的发现模式将是all。无论如何,看看你添加的项目结构,那里可能有一些可疑的东西。你的project4应该只依赖于project3吧?由于其余的依赖项将被传递?我会在本地尝试类似的结构,稍后再回复您。
标签: cdi