当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否可以使用CDI注入EJB实现而不是其接口?》经验,为你挑选了1个好方法。

我的配置是:Wildfly 8.2.0,Weld

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

@Stateless
class Bean implements IBean {
...
}    

interface IBean {
...
}

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

   @Inject
   IBean iBean; //OK
}

编辑:

我在上一个问题中的更多信息: 无状态EJB实现接口注入失败



1> Tarik..:

是的,您可以,但是当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默认定义一个No-Interface视图:

@Stateless
class Bean {
...
}  

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

也可以看看:

EJB中的本地/远程和无接口视图是什么?

定义EJB 3.1视图(本地,远程,无接口)

EJB 3.1 @LocalBean与没有注释

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有