CDI(Contexts And Dependency Injection)是JavaEE 6标准中一个规范,将依赖注入IOC/DI上升到容器级别, 它提供了Java EE平台上服务注入的组件管理核心,简化应该是CDI的目标,让一切都可以被注解被注入。
Contexts概念和我们之前在DCI架构中讨论的业务场景不一样,包含有容器技术架构场景的意思,场景包括四种:request (event), session, application, page,而SEAM框架拓展了两个 conversation 和 business process context。
对于实际项目,你得签署两份维护和支持合同,一份是应用服务器,一份是SpringSource. 这实际是让企业用户为难,最后就形成两种结果: 1.部署Spring在其自己的服务器上 2.部署没有Spring的Java EE 6应用(you could build them with Spring support, but deployment to production will be the issue)
The future of Enterprise Java is very clear - full stack Spring or full stack Java EE - but no mix any more.两者再也不会搞在一起了。
JSF的可管理Bean的生命周期能够绑定到request, session or application等场景上. 如果Bean中再调用EJB,而EJB有Stateless, Stateful or Singleton三种,那么使用开发者就自己动脑筋如何把Bean生命周期与EJB生命周期联系起来考虑,很头疼哦。有点类似对象和关系数据库的阻抗问题,我们在持久层做这种匹配事情,到前面表现层也要做,事情越搞越复杂,这样的JavaEE不要也罢啊。