我正在阅读有关JSF的文章,我有一个关于托管bean的问题。“托管”只是指JSF实现实例化和管理其生命周期这一事实吗?现在新的事情是使用CDI,这是一个处理实例化及其生命周期的不同实现?这就是托管的意思吗?
CDI是一个能够实例化bean并在JSF之外管理它们的实现吗?这就是为什么它更好的原因?如果是这样的话,在JSF之外还有什么选择呢?每个容器或实现都有自己的bean管理方式吗?CDI是统一这一点的东西吗?
发布于 2012-01-08 10:57:21
在JSF2注解之前,在JSF1中,开发人员必须在faces-config.xml中将bean注册为<managed-bean>。这个支持仍然存在于JSF2中,但是在某些情况下,如果你想要覆盖打包在第三方JAR中的托管bean的注释,它可能是唯一的方法。
在JSF和CDI出现之前很久,在plain JSP/Servlet中,开发人员必须手动创建和管理bean本身,方法是显式地实例化它们,并通过以下方式显式地将它们放在请求、会话或应用程序范围中
request.setAttribute("requestScopedBean", requestScopedBean);
request.getSession().setAttribute("sessionScopedBean", sessionScopedBean);
getServletContext().setAttribute("applicationScopedBean", applicationScopedBean);(预检查被省略了,如果bean还不在作用域中,它当然只会被放在作用域中,否则它将被重用)
请注意,上述内容正是JSF“在幕后”所做的事情。
然后,各种MVC框架被发明出来,通过在XML文件中声明bean,甚至通过注释来抽象这一点。每个MVC框架都有自己的bean管理方式。然后是Spring,它试图通过提供一种独立于框架的方法来统一它。然后出现了Java EE 6 CDI,它对它进行了标准化。
这一切都是独立于容器的。它是特定于框架的。
https://stackoverflow.com/questions/8771465
复制相似问题