CDI 和 JNDI 服务有什么关系?
What's the relation between CDI and JNDI service?
据我了解"pre-CDI" EJB 和资源注入解决方案(@EJB
、@Resource
和其他,要清楚)使用JNDI 服务来定位对象"known" 通过注册 JNDI 到容器中,然后在请求的地方注入它们。
相反,CDI 依赖于 bean-discovery-mode
参数(ALL
或 ANNOTATED
)来发现需要管理的 beans。但是这个过程实际上是如何执行的呢?运行时扫描……什么? JNDI根本就没有参与吗?
我觉得我对整个机制有些不对劲...
bean 发现过程在 CDI specification 中有详细描述。基本上,CDI 容器会扫描 bean 部署档案以查找 类 带有特定注释的
根本不涉及JNDI。与 EJB 不同,CDI bean 通常不能通过 JNDI 查找。
只能在 java:comp/BeanManager
的名称下查找 BeanManager
本身,但这几乎从来不需要,除非您需要从非托管代码访问托管 bean。
据我了解"pre-CDI" EJB 和资源注入解决方案(@EJB
、@Resource
和其他,要清楚)使用JNDI 服务来定位对象"known" 通过注册 JNDI 到容器中,然后在请求的地方注入它们。
CDI 依赖于 bean-discovery-mode
参数(ALL
或 ANNOTATED
)来发现需要管理的 beans。但是这个过程实际上是如何执行的呢?运行时扫描……什么? JNDI根本就没有参与吗?
我觉得我对整个机制有些不对劲...
bean 发现过程在 CDI specification 中有详细描述。基本上,CDI 容器会扫描 bean 部署档案以查找 类 带有特定注释的
根本不涉及JNDI。与 EJB 不同,CDI bean 通常不能通过 JNDI 查找。
只能在 java:comp/BeanManager
的名称下查找 BeanManager
本身,但这几乎从来不需要,除非您需要从非托管代码访问托管 bean。