![](/img/trans.png)
[英]Is it possible to inject EJB implementation and not its interface using CDI?
[英]Using @Inject Instance to get EJB and CDI beans that implements specific interface
在我們的應用程序中,我們有 CDI(@ApplicationScoped 注釋)和 EJB(@Stateless 注釋)bean,它們的結構如下:
MyInterface
MyAbstractClass
MyBean (CDI or EJB)
我正在使用下面來獲取實現MyInterface 的應用程序中的所有 bean(CDI 和 EJB):
@Inject
Instance<MyIterface> beans;
在這里,我看到了兩個奇怪的事情:
我怎樣才能通過上面的注入獲得所有的 bean、CDI 和 EJB?
引自 EJB 3.2 規范的第 4.9.2.1 節:
@Stateless public class A implements Foo { ... } @Stateless public class B extends A implements Bar { ... }
假設 Foo 和 Bar 是本地業務接口,並且沒有關聯的部署描述符,會話 bean A 暴露本地業務接口 Foo,會話 bean B 暴露本地業務接口 Bar,但不暴露 Foo。
會話 bean B 需要在其公開的視圖集中顯式包含 Foo,以便應用該接口。 例如:
@Stateless public class A implements Foo { ... } @Stateless public class B extends A implements Foo, Bar { ... }
在您的示例中,定義為 EJB 的MyBean
不公開MyInterface
,因此不會在Instance<MyInterface>
處注入。
有兩種處理方法:
MyInterface
;@Local(MyInterface.class)
注釋 EJB 警告@Local
的方法 - 此 EJB 將僅滿足那些使用作為注釋參數提供的接口之一的注入點。 你將無法注入它
@Inject
MyBean bean;
此外,您將無法將注入的代理轉換為任何其他類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.