【问题标题】:JavaEE @Specializes annotation usage in inheritenceJavaEE @Specializes 继承中的注解用法
【发布时间】: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


【解决方案1】:

我的项目结构与多个 Maven 模块有关。它导致模块的传递依赖。

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 2014-09-03
    • 1970-01-01
    • 2011-11-02
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多