據我所知,「CDI之前」的EJB和資源注入解決方案(@EJB
,@Resource
和其他,明確)使用JNDI服務通過JNDI註冊來定位容器「已知」的對象,然後在需要的地方注入它們CDI和JNDI服務之間的關係是什麼?
相反,CDI依靠bean-discovery-mode
參數(ALL
或ANNOTATED
)來發現需要管理的bean。但這個過程如何實際執行?運行時掃描...什麼? JNDI根本不參與?
我有我得到的東西錯了整個機制的感覺...
據我所知,「CDI之前」的EJB和資源注入解決方案(@EJB
,@Resource
和其他,明確)使用JNDI服務通過JNDI註冊來定位容器「已知」的對象,然後在需要的地方注入它們CDI和JNDI服務之間的關係是什麼?
相反,CDI依靠bean-discovery-mode
參數(ALL
或ANNOTATED
)來發現需要管理的bean。但這個過程如何實際執行?運行時掃描...什麼? JNDI根本不參與?
我有我得到的東西錯了整個機制的感覺...
bean的發現過程進行了詳細的描述CDI specification。基本上,CDI容器掃描具有特定註釋的類的bean部署檔案。
JNDI根本沒有涉及。與EJB不同,CDI bean通常不能通過JNDI查找。
只有BeanManager
本身可以用java:comp/BeanManager
這個名字查找,但除非需要從非託管代碼訪問託管bean,否則幾乎不需要這樣做。
此外,由於CDI 1.1有['CDI'](http://docs.oracle.com /javaee/7/api/javax/enterprise/inject/spi/CDI.html)實用程序類使得不需要在非託管代碼中獲取'BeanManager'。 – BalusC
JNDI僅用於抓取'BeanManager'。然後它只是掃描classpath註釋類。這是咀嚼等人之間http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime – BalusC