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

是否可以使用CDI注入EJB实现而不是其接口?

解高昂
2023-03-14

我的配置是:Wildfly8.2.0,Weld

是否可以在CDI中注入bean而不是在其接口中注入?

@Stateless
class Bean implements IBean {
...
}    

interface IBean {
...
}

@SessionScoped
class Scoped {
   @Inject
   Bean bean; //Fail

   @Inject
   IBean iBean; //OK
}

共有1个答案

鲜于星波
2023-03-14

是的,但是在EJB注入业务视图时,您要公开的唯一业务视图是@local视图,这是实现接口时的默认视图(在您的示例中,IBean是本地业务接口)。所以,如果您想注入bean本身,您需要告诉容器您使用的是无接口视图。

在您的示例中,如果您仍然希望实现接口并注入bean,则应该使用@localbean注释,这意味着bean公开一个无接口视图:

@Stateless
@LocalBean // <-- no-interface view
class Bean implements IBean {
...
}  

interface IBean {
....
}

@SessionScoped
class Scoped {
   @Inject
   Bean bean; //Should be OK
}

或者,如果您不想实现任何接口,那么bean默认定义一个无接口视图:

@Stateless
class Bean {
...
}  

@SessionScoped
class Scoped {
   @Inject
   Bean bean; //OK
}
  • 什么是EJB中的本地/远程和无接口视图?
  • 定义EJB 3.1视图(本地、远程、无接口)
  • EJB 3.1@LocalBean vs no Annotation
 类似资料:
  • 问题内容: 我的配置是:Wildfly 8.2.0,焊接 是否可以在bean中而不是在CDI中的接口中注入bean? 问题答案: 是的,可以,但是当EJB注入业务视图时,您要公开的唯一业务视图是该视图,该视图是实现接口(在您的情况下是本地业务接口)时的默认视图。因此,如果要注入bean本身,则需要告诉容器您正在使用无接口视图。 在您的示例中,如果仍然要实现接口并进行注入,则应使用注释,这意味着Be

  • 我想将和bean注入到我的实现中,但是我得到了。 我使用tomcat和weld实现来实现CDI。我开始将JSF2.2迁移到2.3,因此从改为CDI。我将替换为以及迁移过程中必须做的其他事情,如:-向每个模块添加beansxml-向上下文添加BeanManager-从faces删除bean声明-config.XML-将SPI作为resource-env-ref添加到web.XML如何向实现注入bea

  • 在Spring DI中,将autowired字段声明为可选字段可以使客户端不向其注入任何值。使用Java EE的CDI是否可能做到这一点?我试过可选但失败了。我想知道是否有一个等价的机制我可以使用。 下面是我尝试的: 我得到一个错误消息:线程“main”org.jboss.weld.exceptions.deploymentexception:WELD-001408在注入点[[BackedAnno

  • 问题内容: 我可以将自己的POJO注入到托管对象中,如下所示: 我有这个POJO: 这很好。如果将EJB注入到JSF支持bean中,则可以看到,按预期,该值是非null值。 但是,如果我尝试注入到,我得到部署以下异常: SomeEjb现在: Date有一个公开的,无参数的构造函数,我认为CDI只需“满足依赖性”即可。我确信这种行为是“符合规格”的,但是显然我对CDI的理解还存在很大的漏洞。 有人可

  • 问题内容: 我有一个需要一些模块。有没有办法可以注入模块本身?我意识到这有点麻烦。 例: 我想在这种情况下,解决方案是将方法转换为完整的类。这显然是一个简化的示例;我正在处理的代码有很多这样的方法,因此将它们分成单独的类并引入配置它们的模块会增加相当多的混乱- 我认为Guice就是要减少样板混乱? 也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么… 问

  • 我从对象和对象数组中更改了一个对象两次,这样在第一次迭代中,我过滤掉了几个对象,在第二次迭代中,我使用map更改了每个过滤后的对象。我能用减速机或更好的吗?