当前位置: 首页 > 面试题库 >

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

石喜
2023-03-14
问题内容

我的配置是:Wildfly 8.2.0,焊接

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

@Stateless
class Bean implements IBean {
...
}

interface IBean {
...
}

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

   @Inject
   IBean iBean; //OK
}

问题答案:

是的,可以,但是当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
}


 类似资料:
  • 我的配置是:Wildfly8.2.0,Weld 是否可以在CDI中注入bean而不是在其接口中注入?

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

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

  • CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses

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

  • 我的项目中有无状态实体bean(EJB3.x)和EJBbean(EJB2.x)以及其他类。我想将实体Bean注入EJB Bean。到目前为止,我能够使用JNDI方式(即BeanName#completename)注入它,但我想使用@EJB注入它,就像我们在没有任何JNDI查找的情况下将实体bean注入另一个实体bean一样。这两个bean都是不同模块的一部分,但部署在同一台服务器上。我将weblo