2016-02-25 168 views
1

據我所知,「CDI之前」的EJB和資源注入解決方案(@EJB,@Resource和其他,明確)使用JNDI服務通過JNDI註冊來定位容器「已知」的對象,然後在需要的地方注入它們CDI和JNDI服務之間的關係是什麼?

相反,CDI依靠bean-discovery-mode參數(ALLANNOTATED)來發現需要管理的bean。但這個過程如何實際執行?運行時掃描...什麼? JNDI根本不參與?

我有我得到的東西錯了整個機制的感覺...

+1

JNDI僅用於抓取'BeanManager'。然後它只是掃描classpath註釋類。這是咀嚼等人之間http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime – BalusC

回答

1

bean的發現過程進行了詳細的描述CDI specification。基本上,CDI容器掃描具有特定註釋的類的bean部署檔案。

JNDI根本沒有涉及。與EJB不同,CDI bean通常不能通過JNDI查找。

只有BeanManager本身可以用java:comp/BeanManager這個名字查找,但除非需要從非託管代碼訪問託管bean,否則幾乎不需要這樣做。

+1

此外,由於CDI 1.1有['CDI'](http://docs.oracle.com /javaee/7/api/javax/enterprise/inject/spi/CDI.html)實用程序類使得不需要在非託管代碼中獲取'BeanManager'。 – BalusC

相關問題