我的配置是: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本身,则需要告诉容器您正在使用无接口视图。
@Local
IBean
在您的示例中,如果仍然要实现接口并进行注入Bean,则应使用@LocalBean注释,这意味着Bean公开了无接口视图:
Bean
@LocalBean
@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 }