当前位置: 首页 > 知识库问答 >
问题:

通过@products将@Named限定符添加到现有bean时,CDI依赖项不明确

杨晟
2023-03-14

我在依赖项jar文件中有一个CDIBean实现:

@ApplicationScoped
public class MyService {
  public String doSomething() {...}
}

在我的网络应用程序中,我想通过EL表达式访问该服务,因此我必须给它一个@命名注释。但是我不能在MyService实现上添加注释,因为我无权更改该代码。

因此我试着创造一个像

public class MyServiceProducer {
  @Inject MyService myService;

  @Produces @Named("myService")
  public MyService produceNamedInstance() {
    return myService;
  }
}

这导致了

WELD-001409-带有限定符@Default的MyService类型的模糊依赖关系...可能的依赖关系:-托管Bean[类...MyService]与限定符[@任何@默认]-生产者方法[myService]与限定符[@默认@命名@任何]声明为[...]

如何在不接触原始源代码的情况下添加名为的注释?

共有1个答案

夹谷阳夏
2023-03-14

错误是指@injectmyservice。您基本上是通过@定义了第二个bean来生成MyService,该bean也可以作为MyService注入,但您没有明确说明要通过@inject注入哪个bean。所以CDI被搞糊涂了,抛出了这个模棱两可的依赖错误。

您不应该为已经自动生成的bean创建另一个生产者,而应该扩展现有bean,然后命名它。

@Named("myService")
public class MyNamedService extends MyService {
    //
}

应该注意的是,范围已经继承了,因此不需要重新定义它。

 类似资料:
  • 我需要通过gradle build将mail-1.4.7 jar文件包含到我的intellij idea项目库中。我将编译存储库名称添加到我的构建中。gradle文件如下: 编译“javax”。邮件:邮件:1.4.7' 然后我运行了我的构建,虽然在构建过程中没有错误,但我无法在我的项目库中看到jar。我在考虑通过gradle构建,jar将被自动管理。不确定我是否需要尝试其他东西。我还尝试运行gra

  • 我正在尝试将protobuf依赖项添加到我的maven项目中。我已经使用mvn install安装了protobuf jar文件:install-file-Dpackaging = jar \-DgeneratePom = true \ < br >-DgroupId = com . Google . proto buf \-DartifactId = proto buf-Java \-Dfile

  • 问题内容: 我想导入org.apache.commons.io,但出现此错误: 无法找到包org.apache.commons.io进行播放。如何添加apache io作为依赖项? 问题答案: 添加依赖项 编辑项目Build.scala文件:并添加依赖项 // Add your project dependencies here, “commons-io” % “commons-io” % “2.

  • 我正在使用JBOSS EAP 6.1和JDK 1.6。我已将所有依赖项注册为静态模块。我对JDK API有依赖性 在部署期间,我面临以下问题: java。lang.NoClassDefFoundError:javax/crypto/CipherInputStream java。lang.NoClassDefFoundError:org/omg/CORBA/portable/IDLEntity ja

  • 我的LdapService类是一个无状态EJB,默认无参数构造函数(此项目是一个EJB包) 我试着把它注入到另一个类中,比如: CDI可以识别带有@EJB注释的bean,但注入点向我抛出了关于@Inject的错误: 如果在LdapService中使用@named(“LdapService”),然后在注入点使用: 然后我得到了这个错误: 部署失败。消息是:org.jboss.weld.excepti

  • null 0.0.1-快照 _remote.repositories Maven-metadata-local org-utility-0.0.1-snapshot.jar org-utility-0.0.1-snapshot.pom org-utility-0.0.1-snapshot-jar-with-dependencies.jar 因此,我能够将jar“retrieve org-utili