一尘不染

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

java

我的配置是: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
}

阅读 175

收藏
2020-12-03

共1个答案

一尘不染

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